您可以在虚拟节点上通过集群级别的自定义资源PodNetworking来描述网络配置,从而支持在虚拟节点上为每个Pod配置独立的虚拟交换机、安全组。本文介绍如何在ACK ServerlessACK+ECI场景下,通过创建PodNetworking为Pod配置独立虚拟交换机及安全组。
索引
步骤一:创建网络定义
在ACK ServerlessACK中,您可以创建多个PodNetworking,来规划不同网络平面。在使用前您至少需要创建一个PodNetworking来描述网络配置。创建PodNetworking的示例如下:
apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
name: example
spec:
allocationType:
type: Elastic
selector:
podSelector:
matchLabels:
foo: bar
namespaceSelector:
matchLabels:
foo: bar
securityGroupIDs:
- sg-bpxxxx
vSwitchOptions:
- vsw-bpxxxx
参数说明如下。
参数 | 类型 | 说明 |
allocationType | type | 取值范围:
重要 ACK Serverless暂不支持Fixed策略。如果将type配置为Fixed固定IP策略时,该PodNetworking会对所有符合selector的Pod生效,并非只对有状态(StatefulSet)的Pod生效;此外,也无法在PodNetworking资源中配置
|
selector | podSelector |
|
namespaceSelector |
| |
securityGroupIDs | 不涉及 | 可配置多个安全组ID。在ACK Serverless集群中,只有第一个安全组ID会生效,安全组数量小于等于5个。 |
vSwitchOptions | 不涉及 |
|
步骤二:创建Pod
创建Pod时,Pod将通过标签匹配PodNetworking。如果Pod没有匹配到任何PodNetworking,则此Pod将使用默认的共享ENI(Elastic Network Interface)上的IP地址。如果Pod匹配到了PodNetworking,则将使用PodNetworking中定义的配置分配ENI。关于Pod标签的相关内容,请参见标签。
部署示例
通过下方示例代码展示Kubernetes如何为符合特定标签的Pod分配所需的网络资源,并使用Deployment来创建所需数量的Pod。
---
apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
name: example
spec:
allocationType:
type: Elastic
selector:
podSelector:
matchLabels:
foo: bar
# 同VPC下的安全组
securityGroupIDs:
- sg-2zee386juyk226k1cb5h
# 同VPC下的虚拟交换机
vSwitchOptions:
- vsw-2zewh0vanjx3vmjisna6z
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: elastic-podnetworking
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
# 符合podNetworking的podSelector
foo: bar
spec:
containers:
- name: my-container
image: nginx
常见问题
如何判断Pod是否使用了PodNetworking的网络配置?
Pod创建后,如果在Pod的annotations中是以k8s.aliyun.com/pod-networking作为键值记录创建该Pod,则表示使用了PodNetworking资源。
apiVersion: v1
kind: Pod
metadata:
annotations:
k8s.aliyun.com/pod-eni: "true"
k8s.aliyun.com/pod-networking: podnetworking
labels:
app: example
pod-ip: elastic
Pod创建后为什么没有使用PodNetworking中的网络配置?
Pod标签和PodNetworking中的标签需要保持唯一匹配。请检查两者是否为唯一匹配。