在ACK(阿里云容器服务 Kubernetes 版)中,为节点挂载EIP主要有以下两种方式:
1、自动分配弹性公网EIP
前提条件:确保集群的安全组已开放相关端口,如80端口等;需要升级ack-virtual-node组件到v1.0.0.7-aliyun及之后版本。
操作步骤:登录容器服务管理控制台,在左侧导航栏选择集群,进入集群列表页面后单击目标集群名称,再选择工作负载>无状态,然后单击使用YAML创建资源,选择示例模板或自定义,可以使用如下YAML示例模板创建Pod,通过指定k8s.aliyun.com/eci-with-eip
为true
,ACK Serverless和虚拟节点会自动为此Pod分配一个EIP,并绑定到Pod上。
示例代码
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
k8s.aliyun.com/eci-with-eip: "true"
spec:
containers:
image: nginx:alpine
imagePullPolicy: Always
name: nginx
ports:
containerPort: 80
name: http
protocol: TCP
restartPolicy: OnFailure
注意事项:可以通过Annotationk8s.aliyun.com/eip-bandwidth
指定EIP的带宽,默认值为5Mbps;也可以通过Annotationk8s.aliyun.com/eip-common-bandwidth-package-id
让EIP绑定共享带宽,如果创建的是Deployment,那么Deployment中的每一个Pod都将会被挂载不同的EIP,需谨慎使用此操作,此方式中EIP为动态分配,其生命周期与Pod相同,当删除Pod时,动态分配的EIP也会一并删除。
2、指定弹性公网IP实例ID
前提条件:申请的EIP和集群必须在同一地域。
操作步骤:首先登录VPC管理控制台购买弹性公网IP;然后登录容器服务管理控制台,在左侧导航栏选择集群,进入集群列表页面后单击目标集群名称,再选择工作负载>无状态,接着单击使用YAML创建资源,选择示例模板或自定义,可以使用如下YAML示例模板创建Pod,通过指定Pod的Annotationk8s.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: nginx:alpine
imagePullPolicy: Always
name: nginx
ports:
containerPort: 80
name: http
protocol: TCP
restartPolicy: OnFailure
注意事项:<youreipInstanceId>
需要替换成步骤1中获取的EIP实例ID,如果同时设置了自动分配弹性公网EIP和指定弹性公网IP实例ID,则手动指定的EIP无效。
在ACK中为节点挂载EIP有自动分配和指定实例ID两种方式,各有优缺点和适用场景,用户可根据自身需求选择合适的方式来实现节点的公网访问能力。