全部产品

如何给Pod挂载弹性公网IP

更新时间:2020-09-16 14:48:05

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

背景信息

阿里云Serverless Kubernetes服务、虚拟节点推出Pod挂载弹性公网IP功能,此功能使某些Serverless容器应用的部署和服务访问变得更加简单和便利。

  • 无需创建VPC NAT网关即可让单个Pod访问公网。

  • 无需创建Service也可让单个Pod暴露公网服务。

  • 可以更加灵活而且动态的绑定Pod和EIP。

前提条件

操作步骤

您可以通过以下两种方法给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
        name: nginx
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
      restartPolicy: OnFailure
    说明

    • 您也可以通过 Annotation k8s.aliyun.com/eip-bandwidth指定 EIP 的带宽,默认值为5,单位为M。

    • 您也可以通过Annotation k8s.aliyun.com/eip-common-bandwith-package-id让EIP绑定共享带宽。

    • 如果您创建的是 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 也会一并删除。

  7. 如果需要为ECI指定线路,可以通过设置k8s.aliyun.com/eip-isp实现,所有可用值参见AllocateEipAddressPro页面中的ISP字段,以下是一个示例:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      annotations:
        k8s.aliyun.com/eci-with-eip: "true"
        k8s.aliyun.com/eip-isp: "BGP"
    spec:
      containers:
      - image: registry-vpc.cn-hangzhou.aliyuncs.com/jovi/nginx:alpine
        name: nginx
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
      restartPolicy: OnFailure

方法二:指定弹性公网 IP实例 ID

  1. 登录 VPC 管理控制台,购买弹性公网 IP。请参考申请新EIP弹性公网 IP

  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
        name: nginx
        ports:
        - containerPort: 80
          name: http
          protocol: TCP
      restartPolicy: OnFailure

    说明

    <youreipInstanceId>需要替换成步骤1中获取的 EIP 实例 ID。

  5. 单击左侧导航栏中的应用 > 容器组,查看容器的状态。容器组

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

    说明

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