文档首页 > > 用户指南> 网络管理>

网络平面(NetworkAttachmentDefinition)

网络平面(NetworkAttachmentDefinition)

分享
更新时间:2021/04/14 GMT+08:00

网络平面(NetworkAttachmentDefinition)是集群的一种crd资源,为容器对接ENI(Elastic Network Interface,弹性网络接口)提供配置项,如VPC,子网等。关联网络平面的工作负载支持对接弹性网卡服务,容器能直接绑定弹性网卡,并对外提供服务。

图1 网络平面

约束与限制

  • 仅网络模型为VPC网络(且未开启IPv6)和云原生网络2.0的集群支持创建网络平面;网络模型为容器隧道网络时列表中仅显示“default-network”,不能新增或修改。
  • 需v1.13.7-r0及以上版本的集群才能启用,v1.13.7-r0以下版本集群需要升级到最新版本后才能启用。

通过界面创建

  1. 单击CCE左侧导航栏的“资源管理 > 网络管理”。
  2. “网络平面(NetworkAttachmentDefinition)”页签下,在右上角选择框中点选要操作的集群,单击“添加网络平面”

    图2 添加网络平面
    集群默认创建一个“default-network”,默认的network资源包含了tenant_id、vpc_id、subnet等信息。
    图3 默认网络平面

  3. 在添加网络平面页面,设置基本信息。

    • 网络平面名称:自定义名称,请输入长度范围为4-63的字符。

      default-network、default、mgnt0、mgnt1四个名称为系统预留,请勿使用。

    • 集群名称:请选择要添加网络平面的集群。
    • 安全组:安全组给弹性网卡提供访问策略,最多可以选择5条,安全组必选,不可缺省。
    • 子网:请选择子网。若无子网可选请单击后方的“创建子网”进行创建,创建完成后单击刷新按钮。
    图4 填写网络平面参数

  4. 完成基本配置后单击“创建”,创建完成后页面将自动返回到网络平面列表页,可以看到新添加的网络平面已在列表中。

    图5 添加网络平面成功

通过kubectl命令行创建

  1. 登录已配置好kubectl命令的弹性云服务器。登录方法请参见登录Linux弹性云服务器
  2. 修改networkattachment-test.yaml。

    vi networkattachment-test.yaml

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      annotations:
        tenant_id: 052fd975a300d31e2f90c01ab87e5839
      generation: 3
      name: test
      namespace: kube-system
    spec:
      config: >-
        {"cniVersion":"0.2.0","name":"test","type":"eni-neutron","bridge":"br0","args":{"phynet":"phy_net2","vpc_id":"7a4d731e-fe17-4b72-aa17-962b8363b2d3","securityGroups":"3289d598-8e05-40d8-b726-1f2c425d4935","subnetID":"2945a96b-03a0-4e11-9012-746fe09f714d","cidr":"192.168.1.0/24","availableZone":"cn-north-7b","region":"cn-north-7"}}
    表1 关键参数说明

    参数

    是否必填

    参数类型

    描述

    tenant_id

    String

    Project ID

    config

    表2 config字段数据结构说明Object

    网络平面配置参数

    表2 config字段数据结构说明

    参数

    是否必填

    参数类型

    描述

    cniVersion

    String

    cni版本,支持版本:0.3.1

    name

    String

    网络平面的名称。

    取值范围:1-64个字符,小写字母,数字,中划线,小写字母开头,小写字母或者数字结尾。

    type

    String

    网络平面类型:

    • eni-neutron : eni网络模式
    • vpc-router : VPC路由网络模式
    • overlay_l2 :容器隧道网络模式

    bridge

    String

    网桥(已废弃)

    args

    表3 args字段数据结构说明

    Object

    网络平面的配置参数

    表3 args字段数据结构说明

    参数

    是否必填

    参数类型

    描述

    phynet

    String

    物理网络平面(已废弃)

    vpc_id

    String

    当前集群的虚拟私有云ID

    securityGroups

    String

    安全组ID,取值范围:1-100字符。

    获取方式:

    在控制台的“服务列表”中,单击“网络 > 弹性负载均衡 ELB”,单击“访问控制 > 安全组”,单击安全组名称,在安全组详情页的“基本信息”页签下找到“ID”字段复制即可。

    subnetID

    String

    同一VPC下非集群的子网ID,取值范围:1-100字符。

    获取方式:

    在控制台的“服务列表”中,单击“网络 > 弹性负载均衡 ELB”,单击“子网”,单击子网名称,在子网详情页的“基本信息”页签下找到“子网ID”字段复制即可。

    cidr

    String

    无类别域间路由,即容器所在子网的网段。

    availableZone

    String

    可用区。

    可用区是同一服务区内,电力和网络互相独立的地理区域,一般是一个独立的物理机房,这样可以保证可用区的独立性。

    region

    String

    区域。

    不同区域的资源之间内网不互通。请选择靠近您客户的区域,可以降低网络时延、提高访问速度。

  3. 创建网络平面。

    kubectl create -f networkattachment-test.yaml

    回显如下,表示服务已创建。

    networkattachmentdefinition.k8s.cni.cncf.io/networkattachment-test created

Pod使用ENI能力

创建Pod时,在annotations中指定“k8s.v1.cni.cncf.io/networks: test”字段即可指定网络平面,目前仅支持一个网络平面,当配置多个网络平面,仅第一个网络平面生效,暂不支持更新操作。

CCE Turbo集群创建pod时,网络平面默认选择“default-network”,不需要设置“k8s.v1.cni.cncf.io/networks”字段。

k8s.v1.cni.cncf.io/networks: test”数组中每个元素的数据结构说明请参考表4

表4 k8s.v1.cni.cncf.io/networks元素数据结构说明

参数

是否必选

参数类型

描述

name

String

Pod实例所要引用的网络平面(NetworkAttachmentDefinition)名称。

请求示例:

{
    "apiVersion":"v1",
    "kind":"Pod",
    "metadata":{
        "annotations":{
            "k8s.v1.cni.cncf.io/networks":"test"
        },
        "labels":{
            "name":"test-pod"
        },
        "name":"test-pod"
    },
    "spec":{
        "containers":[
            {
                "image":"test-image",
                "imagePullPolicy":"IfNotPresent",
                "name":"test",
                "resources":{
                    "requests":{
                        "cpu":"100m"
                    }
                }
            }
        ],
        "imagePullSecrets":[
            {
                "name":"default-secret"
            }
        ],
        "restartPolicy":"Always"
    }
}

查看Pod时,网络平面相关属性将回写在annotations中“k8s.v1.cni.cncf.io/network-status”字段下。详情请参考表5

表5 k8s.v1.cni.cncf.io/network-status字段数据结构说明

参数

是否必填

参数类型

描述

name

String

Pod实例所在的网络平面名称

ips

Array

Pod实例的内网地址

mac

String

ENI网卡的Mac地址,仅支持在云原生网络2.0网络模式下显示。

default

Bool

true:表示此网络平面为主网络平面。

false:表示此网络平面为非主网络平面。

响应示例

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  namespace: default
  selfLink: /api/v1/namespaces/default/pods/test-pod
  uid: 0fd06c29-99ad-4e8d-90f9-35366afbb048
  resourceVersion: '640691'
  creationTimestamp: '2021-04-08T08:14:46Z'
  labels:
    name: test-pod
  annotations:
    k8s.v1.cni.cncf.io/network-status: |-
      [{
          "name": "test",
          "ips": [
              "192.168.45.115"
          ],
          "default": true,
          "extras": {
              "cni.yangtse.io/vpc-port-id": "61b0db5f-333f-4237-ac5b-f8adda236334"
          }
      }]
    k8s.v1.cni.cncf.io/networks: test
    kubernetes.io/psp: psp-global
  managedFields:
    - manager: kubectl-create
      operation: Update
      apiVersion: v1
      time: '2021-04-08T08:14:46Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:metadata':
          'f:annotations':
            .: {}
            'f:k8s.v1.cni.cncf.io/networks': {}
          'f:labels':
            .: {}
            'f:name': {}
        'f:spec':
          'f:containers':
            'k:{"name":"test"}':
              .: {}
              'f:image': {}
              'f:imagePullPolicy': {}
              'f:name': {}
              'f:resources':
                .: {}
                'f:requests':
                  .: {}
                  'f:cpu': {}
              'f:terminationMessagePath': {}
              'f:terminationMessagePolicy': {}
          'f:dnsPolicy': {}
          'f:enableServiceLinks': {}
          'f:imagePullSecrets':
            .: {}
            'k:{"name":"default-secret"}':
              .: {}
              'f:name': {}
          'f:restartPolicy': {}
          'f:schedulerName': {}
          'f:securityContext': {}
          'f:terminationGracePeriodSeconds': {}
    - manager: eni-neutron
      operation: Update
      apiVersion: v1
      time: '2021-04-08T08:14:47Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:metadata':
          'f:annotations':
            'f:k8s.v1.cni.cncf.io/network-status': {}
    - manager: kubelet
      operation: Update
      apiVersion: v1
      time: '2021-04-08T08:14:48Z'
      fieldsType: FieldsV1
      fieldsV1:
        'f:status':
          'f:conditions':
            'k:{"type":"ContainersReady"}':
              .: {}
              'f:lastProbeTime': {}
              'f:lastTransitionTime': {}
              'f:status': {}
              'f:type': {}
            'k:{"type":"Initialized"}':
              .: {}
              'f:lastProbeTime': {}
              'f:lastTransitionTime': {}
              'f:status': {}
              'f:type': {}
            'k:{"type":"Ready"}':
              .: {}
              'f:lastProbeTime': {}
              'f:lastTransitionTime': {}
              'f:status': {}
              'f:type': {}
          'f:containerStatuses': {}
          'f:hostIP': {}
          'f:phase': {}
          'f:podIP': {}
          'f:podIPs':
            .: {}
            'k:{"ip":"192.168.45.115"}':
              .: {}
              'f:ip': {}
          'f:startTime': {}
spec:
  volumes:
    - name: default-token-hssgv
      secret:
        secretName: default-token-hssgv
        defaultMode: 420
  containers:
    - name: test
      image: 'swr.cn-north-7.myhuaweicloud.com/p***67/nginx:latest'
      resources:
        requests:
          cpu: 100m
      volumeMounts:
        - name: default-token-hssgv
          readOnly: true
          mountPath: /var/run/secrets/kubernetes.io/serviceaccount
      terminationMessagePath: /dev/termination-log
      terminationMessagePolicy: File
      imagePullPolicy: IfNotPresent
  restartPolicy: Always
  terminationGracePeriodSeconds: 30
  dnsPolicy: ClusterFirst
  serviceAccountName: default
  serviceAccount: default
  nodeName: 192.168.0.238
  securityContext: {}
  imagePullSecrets:
    - name: default-secret
  schedulerName: default-scheduler
  tolerations:
    - key: node.kubernetes.io/not-ready
      operator: Exists
      effect: NoExecute
      tolerationSeconds: 300
    - key: node.kubernetes.io/unreachable
      operator: Exists
      effect: NoExecute
      tolerationSeconds: 300
  priority: 0
  dnsConfig:
    options:
      - name: single-request-reopen
        value: ''
      - name: timeout
        value: '2'
  enableServiceLinks: true
  preemptionPolicy: PreemptLowerPriority
status:
  phase: Running
  conditions:
    - type: Initialized
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2021-04-08T08:14:46Z'
    - type: Ready
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2021-04-08T08:14:47Z'
    - type: ContainersReady
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2021-04-08T08:14:47Z'
    - type: PodScheduled
      status: 'True'
      lastProbeTime: null
      lastTransitionTime: '2021-04-08T08:14:46Z'
  hostIP: 192.168.0.238
  podIP: 192.168.45.115
  podIPs:
    - ip: 192.168.45.115
  startTime: '2021-04-08T08:14:46Z'
  containerStatuses:
    - name: test
      state:
        running:
          startedAt: '2021-04-08T08:14:47Z'
      lastState: {}
      ready: true
      restartCount: 0
      image: 'swr.cn-north-7.myhuaweicloud.com/p***67/nginx:latest'
      imageID: 'docker-pullable://swr.cn-north-7.myhuaweicloud.com/p***67/nginx@sha256:18c8411a66ef352ba7fc857d924c8c9357dbd37551760fd6deba40ee68c9e62a'
      containerID: 'docker://b19912a4b9265adf323fa55b19f08ee0e7600a9edb3505b45e2a5e718ff0e550'
      started: true
  qosClass: Burstable

其他操作

您可以查看新添加网络平面的YAML,也可以对新添加的网络平面进行“删除”操作。

如果网络平面已经被工作负载绑定且在使用中,则不能被删除。如需删除该网络平面,请先删除绑定的工作负载。

图6 管理网络平面
分享:

    相关文档

    相关产品