本文为您介绍容器网络中的常见问题。

Terway网络模式下增加了虚拟交换机后,集群无法访问公网怎么办?

问题现象:在Terway网络下,因Pod没有IP资源而手动增加虚拟交换机,在增加虚拟交换机后,发现不能通过公网访问集群。

问题原因:Pod IP所属的虚拟交换机不具备公网访问的能力。

解决方法:您可以通过NAT网关的SNAT功能,为Pod IP所属的虚拟交换机配置公网SNAT规则。更多信息,请参见为已有集群开启SNAT公网访问能力

手动升级了Flannel镜像版本后,如何解决无法兼容1.16以上版本集群的问题?

问题现象:

集群版本升级到1.16之后,集群节点变成NotReady。

问题原因:

手动升级了Flannel版本,而并没有升级Flannel的配置,导致Kubelet无法识别。

解决方法:

  1. 编辑Flannel,增加cniVersion字段。
    kubectl edit cm kube-flannel-cfg -n kube-system 

    返回结果中增加cniVersion字段。

    "name": "cb0",      
    "cniVersion":"0.3.0",
    "type": "flannel",
  2. 重启Flannel。
    kubectl delete pod -n kube-system -l app=flannel

如何解决Pod启动后存在时延的问题?

问题现象:

Pod启动后网络需要延迟一会才能通信。

问题原因:

配置Network Policy会有一定的时延,关闭Network Policy后,就能解决该问题。

解决方法:

  1. 修改Terway的ConfigMap,增加禁用NetworkPolicy的配置。
    kubectl edit cm -n kube-system eni-config 

    在返回结果中增加以下字段。

    disable_network_policy: "true"
  2. 可选:如果Terway版本不是最新的,请在控制台升级Terway版本。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页面选择运维管理 > 组件管理
    5. 组件管理页面单击网络页签,单击目标Terway组件区域的升级
    6. 提示对话框中单击确认
  3. 重启所有Terway的Pod。
     kubectl delete pod -n kube-system -l app=terway-eniip

如何让Pod访问自己暴露的服务?

问题现象:

Pod无法访问自己暴露的服务,存在时好时坏或者调度到自己就出问题的现象。

问题原因:

Flannel目前默认不允许回环访问。

解决方法:

  • 使用Headless Service暴露服务和访问,具体操作,请参见Headless Services
    说明 推荐使用此方法。
  • 重建集群使用Terway的网络插件,具体操作,请参见使用Terway网络插件
  • 修改Flannel的配置,然后重建Flannel和Pod。
    说明 不推荐此方法,可能会被后续升级覆盖。
    1. 在cni-config.json中增加hairpinMode: true
      kubectl edit cm kube-flannel-cfg -n kube-system

      返回结果中增加以下字段。

      hairpinMode: true
    2. 重启Flannel。
      kubectl delete pod -n kube-system -l app=flannel   
    3. 删除并重新创建Pod。

如何选择Kubernetes集群Terway和Flannel网络插件?

下面为您详细介绍在ACK创建集群时使用的两种网络插件:Terway和Flannel。

在创建Kubernetes集群时,阿里云容器服务提供以下两种网络插件:
  • Flannel:使用的是简单稳定的社区的Flannel CNI插件,配合阿里云的VPC的高速网络,能给集群高性能和稳定的容器网络体验,但功能偏简单,支持的特性少,例如:不支持基于Kubernetes标准的Network Policy。
  • Terway:是阿里云容器服务自研的网络插件,功能上完全兼容Flannel,支持将阿里云的弹性网卡分配给容器,支持基于Kubernetes标准的NetworkPolicy来定义容器间的访问策略,支持对单个容器做带宽的限流。对于不需要使用Network Policy的用户,可以选择Flannel,其他情况建议选择Terway。了解更多Terway网络插件的相关内容,请参见使用Terway网络插件

如何规划集群网络?

在创建ACK集群时,需要指定专有网络VPC、虚拟交换机、 Pod网络CIDR(地址段)和Service CIDR(地址段)。建议您提前规划ECS地址、Kubernetes Pod地址和Service地址。详情请参见Kubernetes集群网络规划

ACK是否支持hostPort的端口映射?

  • 不支持hostPort。
  • 容器服务ACK的Pod地址是可以直接被VPC中其他资源访问的,不需要额外的端口映射。
  • 如果需要把服务暴露到外部,可以使用NodePort或者LoadBalancer类型的Service。

ACK集群是否支持VPC多路由表?

目前只有专有版集群支持配置VPC多路由表。具体操作,请参见使用VPC的多路由表功能。如果需ACK托管版集群支持使用VPC的多路由表功能,请提交工单

如何查看集群的网络类型及对应的虚拟交换机?

ACK支持两种容器网络类型,分别是Flannel网络类型和Terway网络类型。

通过以下步骤查看您创建集群时所选择的网络类型。

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 单击基本信息页签,在集群信息区域查看集群的容器网络类型,即网络插件右侧的值。
    • 如果网络插件右侧显示terway-eniip ,则容器的网络类型为Terway网络。
    • 如果网络插件右侧显示Flannel,则容器的网络类型为Flannel网络。

通过以下步骤查看对应网络类型使用的虚拟交换机。

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 单击集群资源页签,查看对应网络类型的虚拟交换机。
    • 如果您集群网络类型为Terway网络,集群资源页签中同时显示节点虚拟交换机Pod虚拟交换机信息。
    • 如果您集群网络类型为Flannel网络,集群资源页签中显示节点虚拟交换机信息。

如何查看集群中使用的云资源?

通过以下步骤查看集群中使用的云资源信息,包括虚拟机、虚拟专有网络VPC、Worker RAM角色等。
  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 单击集群资源页签,查看集群中使用的云资源信息。