本文主要为您介绍如何在 serverless kubernetes 或虚拟节点中给Pod挂载 EIP。

背景信息

阿里云 Serverless Kubernetes 服务/虚拟节点推出 Pod 挂载弹性公网IP功能,此功能使某些 Serverless容器应用的部署和服务访问变得更加简单和便利。
  • 无需创建 VPC NAT网关即可让单个 Pod 访问公网
  • 无需创建 Service 也可让单个 Pod 暴露公网服务
  • 可以更加灵活而且动态的绑定 Pod 和 EIP

前提条件

  • 您已经创建一个Serverless Kubernetes集群或已在Kubernetes 集群创建一个虚拟节点
  • 请确保该集群的安全组已开放相关端口(本示例中需要开放80端口)。

操作步骤

您可以通过以下两种方法,给Pod挂载弹性公网IP。
  • 自动分配弹性公网 EIP
    1. 登录容器服务管理控制台
    2. 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 无状态,进入无状态(Deployment)页面。
    3. 选择所需的集群和命名空间,选择样例模板或自定义,然后单击创建
      您可以使用如下 yaml 示例模板创建 Pod。本例中,通过指定k8s.aliyun.com/eci-with-eip为 true,Serverless Kubernetes服务/虚拟节点会自动为此Pod分配一个EIP,并且绑定到 Pod上。


      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
        annotations:
          "k8s.aliyun.com/eci-with-eip": "true"
      spec:
        containers:
        - image: registry-vpc.cn-hangzhou.aliyuncs.com/jovi/nginx:alpine
          imagePullPolicy: Always
          name: nginx
          ports:
          - containerPort: 80
            name: http
            protocol: TCP
        restartPolicy: OnFailure
      说明
      • 您也可以通过Annotation k8s.aliyun.com/eip-bandwidth指定EIP的带宽,默认值为5,单位为M。
      • 如果您创建的是 Deployment,那么 Deployment 中的每一个 Pod 都将会被挂载不同的 EIP,请谨慎使用此操作。
    4. 单击左侧导航栏中的应用 > 容器组,查看容器的状态。

    5. 在目标容器组右侧单击更多 > 编辑,弹出编辑 YAML文件。

      说明 YAML文件中k8s.aliyun.com/allocated-eipAddress: 47.110.XX.XX的IP地址即为EIP的公网访问地址。
    6. 在浏览器中输入http://ip地址,您可访问 nginx 欢迎页。

      此处的http://ip地址为YAML文件中k8s.aliyun.com/allocated-eipAddress: 47.110.XX.XX的IP地址。



      说明 此方式中 EIP 为动态分配,其生命周期与Pod相同,当删除Pod时,动态分配的EIP也会一并删除。
  • 指定弹性公网 IP实例 ID
    1. 登录 VPC 管理控制台,购买弹性公网 IP。请参考申请EIP

      说明 申请的 EIP 和集群必须在同一区域。
    2. 登录容器服务管理控制台
    3. 在 Kubernetes 菜单下,单击左侧导航栏中的应用 > 无状态,进入无状态(Deployment)页面。
    4. 选择所需的集群和命名空间,选择样例模板或自定义,然后单击创建
      您可以使用如下 yaml 示例模板创建 Pod。本例中,通过指定Pod的Annonation k8s.aliyun.com/eci-eip-instanceid为EIP实例ID。


      apiVersion: v1
      kind: Pod
      metadata:
        name: nginx
        annotations:
          "k8s.aliyun.com/eci-eip-instanceid": "<youreipInstanceId>"
      spec:
        containers:
        - image: registry-vpc.cn-hangzhou.aliyuncs.com/jovi/nginx:alpine
          imagePullPolicy: Always
          name: nginx
          ports:
          - containerPort: 80
            name: http
            protocol: TCP
        restartPolicy: OnFailure
      说明 <youreipInstanceId>需要替换成步骤1中获取的EIP实例ID。
    5. 单击左侧导航栏中的应用 > 容器组,查看容器的状态。

    6. 在浏览器中输入http://ip地址,您可访问 nginx 欢迎页。

      说明 此处的http://ip地址为步骤1中申请的EIP的IP地址