更新时间:2024-12-04 GMT+08:00

容器如何访问VPC内部网络

前面章节介绍了使用Service和Ingress访问容器,本节将介绍如何从容器访问内部网络(VPC内集群外),包括VPC内访问和跨VPC访问。

VPC内访问

根据集群容器网络模型不同,从容器访问内部网络有不同表现。

  • 容器隧道网络

    容器隧道网络在节点网络基础上通过隧道封装网络数据包,容器访问同VPC下其他资源时,只要节点能访问通,容器就能访问通。如果访问不通,需要确认对端资源的安全组配置是否能够允许容器所在节点访问。

  • VPC网络

    VPC网络使用了VPC路由功能来转发容器的流量,容器网段与节点VPC不在同一个网段,容器访问同VPC下其他资源时,需要对端资源的安全组能够允许容器网段访问

    例如集群节点所在网段为192.168.10.0/24,容器网段为172.16.0.0/16。

    VPC下(集群外)有一个地址为192.168.10.52的ECS,其安全组规则仅允许集群节点的IP网段访问。

    此时如果从容器中ping 192.168.10.52,会发现无法ping通。

    kubectl exec test01-6cbbf97b78-krj6h  -it -- /bin/sh
    / # ping 192.168.10.25
    PING 192.168.10.25 (192.168.10.25): 56 data bytes
    ^C
    --- 192.168.10.25 ping statistics ---
    104 packets transmitted, 0 packets received, 100% packet loss

    在安全组放通容器网段172.16.0.0/16访问。

    此时再从容器中ping 192.168.10.52,会发现可以ping通。

    $ kubectl exec test01-6cbbf97b78-krj6h  -it -- /bin/sh
    / # ping 192.168.10.25
    PING 192.168.10.25 (192.168.10.25): 56 data bytes
    64 bytes from 192.168.10.25: seq=0 ttl=64 time=1.412 ms
    64 bytes from 192.168.10.25: seq=1 ttl=64 time=1.400 ms
    64 bytes from 192.168.10.25: seq=2 ttl=64 time=1.299 ms
    64 bytes from 192.168.10.25: seq=3 ttl=64 time=1.283 ms
    ^C
    --- 192.168.10.25 ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss

跨VPC访问

跨VPC访问通常采用对等连接等方法打通VPC。

  • 容器隧道网络只需将节点网络与对端VPC打通,容器自然就能访问对端VPC。
  • VPC网络由于容器网段独立,除了要打通VPC网段,还要打通容器网段。
    例如有如下两个VPC。
    • vpc-demo:网段为192.168.0.0/16,集群在vpc-demo内,容器网段为10.0.0.0/16。
    • vpc-demo2:网段为10.1.0.0/16。

    创建一个名为peering-demo的对等连接(本端为vpc-demo,对端为vpc-demo2),注意对端VPC的路由添加容器网段。

    这样配置后,在vpc-demo2中就能够访问容器网段10.0.0.0/16。具体访问时要关注安全组配置,打通端口配置。

访问其他云服务

与CCE进行内网通信的与服务常见服务有:RDS、DCS、Kafka、RabbitMQ、ModelArts等。

访问其他云服务除了上面所说的VPC内访问跨VPC访问的网络配置外,还需要关注所访问的云服务是否允许外部访问,如DCS的Redis实例,需要添加白名单才允许访问。通常这些云服务会允许同VPC下IP访问,但是VPC网络模型下容器网段与VPC网段不同,需要特殊处理,将容器网段加入到白名单中。

容器访问内网不通的定位方法

如前所述,从容器中访问内部网络不通的情况可以按如下路径排查:

  1. 查看要访问的对端服务器安全组规则,确认是否允许容器访问。
    • 容器隧道网络模型需要放通容器所在节点的IP地址
    • VPC网络模型需要放通容器网段
  2. 查看要访问的对端服务器是否设置了白名单,如DCS的Redis实例,需要添加白名单才允许访问。添加容器和节点网段到白名单后可解决问题。
  3. 查看要访问的对端服务器上是否安装了容器引擎,是否存在与CCE中容器网段冲突的情况。如果有网络冲突,会导致无法访问。