详情页标题前

阿里云容器服务ACK为Pod配置固定IP及独立虚拟交换机、安全组-云淘科技

详情页1

Terway Trunk ENI支持为每个Pod配置固定IP、独立的虚拟交换机、安全组,能提供精细化流量管理、流量隔离、网络策略配置和IP管理能力。本文介绍如何在Terway网络中为Pod配置固定IP及独立虚拟交换机、安全组。

背景信息

弹性网卡中继(Trunk ENI)是一种新的虚拟网卡。除了提供原有弹性网卡(ENI)相同的功能外,还支持将额外的ENI挂载到Trunk ENI上使用。这部分额外的ENI将以独占的方式分配给Pod。

在为集群启用Trunk ENI功能后,可以让一部分Pod使用自定义配置,另外的Pod则使用共享配置。Pod自定义配置是可选功能,默认情况下创建的Pod,使用的是共享ENI上的IP地址。只有当您主动声明为指定Pod开启自定义配置后,相应的Pod才能使用自定义配置。

启用Pod自定义配置后,集群内将部署terway-controlplane组件, 其工作模式如下图所示。

阿里云容器服务ACK为Pod配置固定IP及独立虚拟交换机、安全组-云淘科技

使用限制

  • 在Terway网络中为Pod配置固定IP及独立虚拟交换机、安全组功能正在公测中,如需使用请到配额平台申请。

  • 使用Terway插件Trunk功能,您需要选择支持Trunk功能,且响应参数为EniTrunkSupported=true的实例。关于实例支持情况,请参见 DescribeInstanceTypes。

  • 单节点所支持Pod有数量限制,关于节点所支持容器网络Pod数量的详细描述,请参见节点所支持的容器网络Pod数量。

  • Pod安全组规则不会应用到同节点Pod间流量及同节点上节点与Pod间流量。如果您需要限制,可以通过NetworkPolicy进行配置。

  • ACK专有版需要额外申请Trunk实例使用权限,请向ECS提交工单申请。ACK托管版无需额外申请Trunk实例使用权限。

步骤一:创建ACK集群

创建ACK集群,网络插件选择Terway,在Terway模式中选中Trunk ENI支持。详细信息,请参见创建Kubernetes专有版集群和创建Kubernetes托管版集群。

步骤二:创建网络定义

Terway增加一种名为PodNetworking的自定义资源来描述网络配置。您可以创建多个PodNetworking,来规划不同网络平面。在使用前您需要创建至少一个PodNetworking来描述网络配置。创建PodNetworking的示例如下:

apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
  name: example
spec:
  allocationType:
    type: Elastic/Fixed
    releaseStrategy: TTL
    releaseAfter: "1h"
  selector:
    podSelector:
      matchLabels:
        foo: bar
    namespaceSelector:
      matchLabels:
        foo: bar
  securityGroupIDs:
  - sg-bpxxxx
  vSwitchOptions:
  - vsw-bpxxxx
status:
  status: Ready
                

参数说明如下:

参数

说明

allocationType

(描述Pod IP分配的策略)

type

取值范围:

  • Elastic:弹性IP策略。Pod删除后,IP资源被释放。

  • Fixed:固定IP策略。

    • 启用后该PodNetworking只对有状态(StatefulSet)的Pod生效。关于StatefulSet,请参见StatefulSet。

    • 如果您使用了固定IP策略,Pod重建后的可用区将被添加约束,来确保和第一次调度的可用区匹配。

releaseStrategy

IP释放策略,只有将type配置为Fixed时,该参数才有效。参数取值范围如下。

  • TTL:延迟释放IP策略。当Pod被删除一段时间后,才会释放IP,最小值为5 min。

  • Never :不释放IP策略。当您无需使用IP时,需要自行删除PodENI资源。

releaseAfter

延迟回收时间。仅在releaseStrategyTTL模式下生效,支持时间格式为Go time type,例如2h45m5m0s。关于Go time type,请参见Go time type。

selector

(用于配置标签选择器,被选中的Pod将使用该网络配置)

podSelector

  • 用来匹配Pod的Labels,匹配的Pod在创建时将使用这个网络配置。

  • 如果同时配置podSelectornamespaceSelector,符合全部匹配规则的Pod在创建时将使用这个网络配置。

  • 您在配置Pod标签与PodNetworking中的seclector时,请确保有唯一匹配关系,如果Pod被多个PodNetworking配置匹配,将使用任意匹配的PodNetworking配置。

namespaceSelector

  • 用来匹配Namespace的Labels,匹配的Pod在创建时将使用这个网络配置。

  • 如果同时配置podSelectornamespaceSelector,符合全部匹配规则的Pod在创建时将使用这个网络配置。

  • 您在配置Pod标签与PodNetworking中的seclector时,请确保有唯一匹配关系,如果Pod被多个PodNetworking配置匹配,将使用任意匹配的PodNetworking配置。

vSwitchOptions

  • 用于配置Pod使用的vSwitch,多个vSwitchID之间为或关系。Pod仅能使用一个vSwitch,Terway将选择一个符合条件的vSwitch。

  • 您的Pod所在可调度可用区将被添加约束,来确保这些可用区和您配置的vSwitchOptions列表内资源所处的可用区一致。

  • 请确保vSwitchOptions中的vSwitch所在可用区,和您指定调度的节点可用区一致,并且拥有足够的剩余IP资源,否则Pod将创建失败。

securityGroupIDs

可配置多个安全组ID,配置多个安全组时将同时生效,安全组数量小于等于5个。

创建PodNetworking资源后,Terway将同步网络配置信息,只有在status成为Ready后,该网络资源才能对Pod生效。

Elastic类型的网络配置示例

apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
  name: example
spec:
  allocationType:
    type: Elastic
  selector:
    podSelector:
      matchLabels:
        foo: bar
  securityGroupIDs:
  - sg-bpxxxx
  vSwitchOptions:
  - vsw-bpxxxx
status:
  status: Ready

Fixed类型的网络配置示例

apiVersion: network.alibabacloud.com/v1beta1
kind: PodNetworking
metadata:
  name: example
spec:
  allocationType:
    type: Fixed
    releaseStrategy: TTL
    releaseAfter: "1h"
  selector:
    podSelector:
      matchLabels:
        foo: bar
  securityGroupIDs:
  - sg-bpxxxx
  vSwitchOptions:
  - vsw-bpxxxx
status:
  status: Ready

步骤三:创建Pod

创建Pod时,Pod将通过标签去匹配PodNetworking。如果Pod没有匹配到任何PodNetworking,则Pod将使用默认的共享ENI上的IP。如果Pod有匹配到PodNetworking,则将使用PodNetworking中定义的配置分配ENI。关于Pod标签的相关内容,请参见标签。

Terway会为这类Pod创建相应的名为PodENI的自定义资源,用于跟踪Pod所使用的资源,该资源由Terway管理,您不可修改该资源。

为已有集群Pod配置固定IP及独立虚拟交换机、安全组

前提条件

网络插件类型为terway-eniip。

使用限制

  • 2020年06月之前创建的托管版集群不支持此功能。

  • 固定IP及独立虚拟交换机、安全组开启后不可关闭。

开启terway-eniip

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 组件管理页面,单击网络页签,找到terway-eniip组件。

  4. terway-eniip卡片,单击升级,升级terway-eniip组件到最新版本。

    如果卡片上没有升级字样,说明当前组件已是最新版本,请跳过此步骤。

  5. 开启terway-enniip。

    1. 执行如下命令,编辑eni-config。

      kubectl edit cm -nkube-system eni-config
    2. 编辑YMAL文件的eni-config参数,且eni-config必须为合法的JSON格式。

      apiVersion: v1
      data:
        10-terway.conf: |
          {
            "cniVersion": "0.3.1",
            "name": "terway",
            "eniip_virtual_type": "IPVlan",
            "type": "terway"
          }
        disable_network_policy: "false"
        eni_conf: |
          {
            "min_pool_size": 0,
            "enable_eni_trunking": true, # 启用Trunk
            ...
          }
      kind: ConfigMap
    3. 执行如下命令,重启terway pods,使配置生效。

      kubectl delete pod -n kube-system -l app=terway-eniip
  6. 请在terway-eniip参数配置完成后,在组件管理页面的网络页签,安装terway-controlplane组件。

    安装结束后,在terway-controlplane卡片上可以看到已安装字样。

迁移集群时,停止terway-controlplane

ACK专有版集群在启用Pod自定义配置后,不能直接迁移到Pro版集群。您需要在迁移前停止terway-controlplane ,并在迁移后启用terway-controlplane。

  1. 迁移前准备。

    1. 执行以下命令,停止terway-controlplane。

      kubectl scale deploy -nkube-system terway-controlplane --replicas 0
    2. 执行以下命令,完成webhook配置。

      # 备份webhook配置。
      kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io terway-controlplane -oyaml > terway-controlplane.validatingwebhookconfigurations.yaml
      # 清理webhook配置。
      kubectl delete -f terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl delete -f terway-controlplane.validatingwebhookconfigurations.yaml
  2. 迁移集群完成后,检查迁移结果。

    说明

    关于迁移集群的具体操作,请参见热迁移ACK专有版集群至ACK集群Pro版。

    • 如果迁移集群失败,执行以下命令,恢复webhook和terway-controlplane。

      # 恢复webhook配置。
      kubectl apply -f terway-controlplane.mutatingwebhookconfigurations.yaml
      kubectl apply -f terway-controlplane.validatingwebhookconfigurations.yaml
      # 恢复terway-controlplane。
      kubectl scale deploy -nkube-system terway-controlplane --replicas 1
    • 如果迁移集群成功,执行以下命令,清理资源。

      kubectl delete deploy -nkube-system terway-controlplane
  3. 组件管理页面安装terway-controlplane。具体操作,请参见管理组件。

常见问题

如何判断Pod是否使用了PodNetworking的网络配置?

  1. 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
  2. Terway将创建Pod同名、同命名空间的PodENI资源,用于记录所使用的网络配置信息。您可以通过以下方式查询。

    kubectl get podenis.network.alibabacloud.com your-pod-name -n default -oyaml
    apiVersion: network.alibabacloud.com/v1beta1
    kind: PodENI
    metadata:
      finalizers:
      - pod-eni
      generation: 1
      name: your-pod-name
      namespace: default
    spec:
      allocations:
      - allocationType:
          type: Elastic
        eni:
          id: eni-bp1xxxx
          mac: 00:16:xx:xx:xx:xx
          securityGroupIDs:
          - sg-bp1xxxx
          vSwitchID: vsw-bp1xxxx
          zone: cn-hangzhou-h
        ipv4: 192.168.x.x
        ipv4CIDR: 192.168.x.x/19
        ipv6: 2408:x:x:x:x:x:x:x
        ipv6CIDR: 2408:x:x:x::/64
      zone: cn-hangzhou-h
    status:
      eniInfos:
        eni-bp1xxxx:
          id: eni-bp1xxxx
          status: Bind
          vid: 1001
      instanceID: i-bp1xxxx
      phase: Bind
      podLastSeen: "2021-xx-xxT00:00:00Z"
      trunkENIID: eni-bp1xxxx

Pod创建后为什么没有使用PodNetworking中的网络配置?

  1. 请确保PodNetworking资源状态为Ready

  2. 请确保Pod标签和PodNetworking中的标签可以唯一匹配。

  3. 如果您使用固定IP策略,则非StatefulSet控制器创建的Pod将不能被匹配。

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

阿里云企业补贴进行中: 马上申请

腾讯云限时活动1折起,即将结束: 马上收藏

同尘科技为腾讯云授权服务中心。

购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

转转请注明出处:https://www.yunxiaoer.com/168559.html

(0)
上一篇 2023年12月10日 上午11:13
下一篇 2023年12月10日 上午11:14
详情页2

相关推荐

  • 阿里云容器服务ACK扩容Terway场景下的Pod虚拟交换机-云淘科技

    Terway网络场景下,当虚拟交换机(vSwitch)IP资源不足时,或者您需要添加新的vSwitch(Pod 网段)时,您需要对vSwitch扩容。本文介绍如何新增虚拟交换机以增加新的IP地址资源供ACK集群使用。 使用限制 请确保您添加的vSwitch包含节点的可用区,如果节点的可用区不在vSwitch列表中,则将使用主网卡对应的vSwitch。 对已经…

    2023年12月10日
  • 阿里云容器服务ACK使用Terraform创建ACK托管版集群-云淘科技

    Terraform是HashiCorp公司提供的一种开源工具,用于安全高效地预览,配置和管理云基础架构和资源,帮助开发者自动化地创建、更新阿里云基础设施资源,并进行版本管理。本文介绍如何使用Terraform创建ACK托管版集群。 前提条件 已安装Terraform。 说明 请确认Terraform版本不低于v0.12.28,可通过terraform &#8…

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACK使用Terraform管理组件-云淘科技

    阿里云容器服务ACK提供丰富的组件,用于扩展集群功能。本文主要介绍如何在Terraform中配置组件,以帮助您在多场景下完成业务的管理。 组件类型 容器服务ACK管理的集群组件类型包括系统组件和可选组件。更多组件信息,请参见组件概述。 系统组件 系统组件是运行ACK集群所依赖的基础组件,创建集群时,会默认安装。例如: kube-apiserver kube-…

    阿里云容器服务 2023年12月10日
  • 阿里云容器服务ACK容器网络FAQ-云淘科技

    本文为您介绍容器网络中的常见问题。 索引 Terway相关 Terway网络模式下增加了虚拟交换机后,集群无法访问公网怎么办? 使用Terway网络的ENI模式出现网络异常 容器服务Kubernetes的Terway网络场景中交换机的IP资源不足 Terway网络模式下,Pod分配的IP不在虚拟交换机网段中怎么办? Terway网络模式扩容vSwitch后,…

    2023年12月10日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云容器服务ACK使用Terraform管理组件-云淘科技

    阿里云容器服务ACK提供丰富的组件,用于扩展集群功能。本文主要介绍如何在Terraform中配置组件,以帮助您在多场景下完成业务的管理。 组件类型 容器服务ACK管理的集群组件类型包括系统组件和可选组件。更多组件信息,请参见组件概述。 系统组件 系统组件是运行ACK集群所依赖的基础组件,创建集群时,会默认安装。例如: kube-apiserver kube-…

    阿里云容器服务 2023年12月10日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。