配置Pod使用多网卡多EIP功能
应用场景
当Pod需要创建多张网卡管理网络流量时,可使用CCI服务多网卡多EIP功能。多网卡多EIP功能允许客户在同一命名空间下创建多个network,并通过Pod中annotation字段配置各个网卡使用的network和EIP。
功能说明
- 创建多个network时,必须指定命名空间下某一个network为默认网络(spec.defaultNetwork为true),如果命名空间下仅有一个network,该network被识别为默认网络。
- 命名空间存在多个network时,默认网络不能更改成非默认网络。
- 命名空间存在多个network时,可以删除默认网络配置,但是需要删除后重新配置新的默认网络,否则网络功能异常。
- 创建多个network时,network之间的子网不能重复,并且所有的network配置的子网必须都在同一个VPC下。
- 多网卡多EIP功能禁止在Deployment上使用,仅支持在Pod上使用。
- Pod上可以通过yangtse.io/multi-eip-ids和k8s.v1.cni.cncf.io/networks两种annotation进行配置,但不可同时配置。
- 多网卡多EIP功能仅允许计费类型为通用型(轻享)(即general-computing-lite类型)的Pod使用。
- 单个Pod最多可以配置5张网卡。
- 单个Pod配置多张网卡时,Pod IP只会展示主网卡的IP(status.podIP和status.podIPs展示的是第一张网卡的IP信息)。
约束与限制
- 使用多网卡的Pod在启动速度上会略微变慢,请合理规划使用。
- 多网卡多EIP配置,仅支持IPv4协议。
- Pod配置多网卡多EIP时,网络将默认使用主网卡,需要把其他网卡的特殊配置(例如EIP访问公网、安全组网段放通等)同步到主网卡上,否则可能出现镜像拉取失败、挂卷失败等问题。
- Pod配置多网卡多EIP时,不支持配置自动创建镜像快照cci.io/image-snapshot-create-if-not-present annotation功能。
- Pod配置多网卡多EIP时,不支持配置单个EIP annotation功能(包括yangtse.io/eip-bandwidth-id、yangtse.io/eip-bandwidth-size、yangtse.io/eip-network-type、yangtse.io/eip-charge-mode、yangtse.io/eip-bandwidth-name、yangtse.io/pod-with-eip、yangtse.io/eip-id)。
- 当主network下subnet IP耗尽时,不会选择非主network。
操作步骤
- 访问CCI API设置默认网络,并创建多个Network。
apiVersion: yangtse/v2 kind: Network metadata: name: test-network namespace: test spec: defaultNetwork: true // defaultNetwork配置为true表示该network为默认网络 networkType: underlay_neutron subnets: - subnetID: ${subnet1} - subnetID: ${subnet2}
- 登录云容器实例 CCI2.0控制台。
- 左侧导航栏中选择“负载管理 > 容器组”,单击“YAML创建”。
- 配置Pod代码,示例如下所示:
kind: Pod apiVersion: cci/v2 metadata: name: pod-muti-eip-test annotations: k8s.v1.cni.cncf.io/networks: '[{"name":"second-network","interface":"eth0"},{"name":"default-network","interface":"eth1"},{"name":"default-network","interface":"eth2"},{"name":"second-network","interface":"eth3"}]' resource.cci.io/instance-type: general-computing-lite resource.cci.io/pod-size-specs: 0.25_0.5 spec: containers: - name: init-myservice image: nginx:latest ports: - containerPort: 80 protocol: TCP resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: Default securityContext: {} imagePullSecrets: - name: imagepull-secret
表1 yangtse.io/multi-eip-ids和k8s.v1.cni.cncf.io/networks字段说明 字段名称
类型
格式
说明
示例
yangtse.io/multi-eip-ids
String
eip-id1,eip-id2,eip-id3,eip-id4
- EIP的ID值,以","分割,单个ID使用EIP服务未绑定EIP资源的ID且EIP的ID不重复。
yangtse.io/multi-eip-ids: eip-id1,eip-id2,eip-id3,eip-id4
k8s.v1.cni.cncf.io/networks
String
[
{
"name": "second-network",
"interface": "eth1",
"eip": {
"id": "eip-id",
"bandwidth-size": "5",
"network-type": "5_g-vm",
"charge-mode": "bandwidth",
"bandwidth-name": "eip-myself",
"bandwidth-id": "bandwidth-id"
}
}
]
- name:非必填,默认值为"",不填使用默认network。network必须提前创建。
- interface:非必填,默认值为"",不填按照数组顺序构造网卡名。如数组的第一个元素,网卡名为 eth0,Pod内网卡的名称,请务必按照网卡顺序配置为eth0、eth1。
- eip:非必填,不填表示该网卡不需要配置EIP,Pod该网卡关联的EIP信息,一张网卡只能绑定一个EIP的ID,多张网卡不能绑定同一个EIP的ID。
- id:非必填,填写要求为已创建且未绑定的EIP的ID,不填表示不使用已有的EIP的ID。填写该字段后,bandwidth-id、bandwidth-size、bandwidth-name、network-type、charge-mode均无效。
- bandwidth-id:非必填,填写共享带宽ID表示使用该共享带宽自动创建EIP;不填写,表示使用独享带宽创建EIP。填写该字段后,bandwidth-size、bandwidth-name、charge-mode均无效。
- bandwidth-size:非必填,默认值为5,独享带宽大小,单位为Mbit/s。填写后将按照带宽大小创建独享带宽的EIP,和network-type、charge-mode、bandwidth-name一起使用。具体配置大小以各区域配置为准,详情请参见弹性公网IP控制台的购买页面。
- network-type:非必填,默认值为5_bgp,公网IP类型。填写后将按照公网IP类型创建EIP,和bandwidth-size、charge-mode、bandwidth-name一起使用。具体类型以各区域配置为准,详情请参见弹性公网IP控制台的购买页面。例如,“华东-上海一”区域支持以下类型:
- 5_bgp:全动态BGP
- 5_sbgp:静态BGP
- charge-mode:非必填,计费类型。填写后将按照计费类型创建EIP,和bandwidth-size、network-type、bandwidth-name一起使用。默认值以各区域配置为准,配置参考:
- bandwidth:按带宽计费
- traffic:按流量计费
- bandwidth-name:非必填,默认值随机生成,独享带宽名称。填写后将按照名称创建独享带宽,和bandwidth-size、network-type、charge-mode一起使用。配置参考:
- 1-64个字符,开头结尾仅支持使用数字、字母,支持数字、字母、中文、_(下划线)、-(中划线)、.(点)。
- 最小长度:1
- 最大长度:64
k8s.v1.cni.cncf.io/networks: [{"name":"default-network","interface":"eth0","eip":{"id":"eip-id"}},{"name":"second-network","interface":"eth1","eip":{"bandwidth-size":"5","network-type":"5_g-vm","charge-mode":"bandwidth","bandwidth-name":"eip-myself"}},{"name":"third-network","interface":"eth2","eip":{"bandwidth-id":"bandwidth-id"}},{"name":"network-no-eip","interface":"eth3"}]
- 单击“确定”。