前面章節介紹了使用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網段不同,需要特殊處理,將容器網段加入到白名單中。
容器訪問內網不通的定位方法
如前所述,從容器中訪問內部網絡不通的情況可以按如下路徑排查:
-
查看要訪問的對端服務器安全組規則,確認是否允許容器訪問。
- 容器隧道網絡模型需要放通容器所在節點的IP地址
- VPC網絡模型需要放通容器網段
-
查看要訪問的對端服務器是否設置了白名單,如DCS的Redis實例,需要添加白名單才允許訪問。添加容器和節點網段到白名單后可解決問題。
-
查看要訪問的對端服務器上是否安裝了容器引擎,是否存在與CCE中容器網段沖突的情況。如果有網絡沖突,會導致無法訪問。