问题描述
在同一网络中的Compute Engine和GKE群集上运行着一个Web服务应用。
集群中的Pod是否可以使用Web服务应用程序的内部IP地址来调用Web服务应用程序?
您的回答将不胜感激。
谢谢。
解决方法
TL; DR
是的。
假设您正在谈论VM
的内部IP地址,则需要创建一条规则,允许从pod address range
到VM
的流量。
示例
假设:
- 有一个名为
Compute Engine
的{{1}}实例,它被配置为在端口nginx
上运行。 - 与您的
80
实例在同一网络中有一个Kubernetes Engine
。
您将需要检查GCE
集群的pod ip地址范围。您可以通过以下任一方式来做到这一点:
-
GKE
(网络用户界面) -
Cloud Console
可以通过以下任一方式创建防火墙规则:
-
$ gcloud container clusters describe CLUSTER-NAME --zone=ZONE | grep -i "clusterIpv4Cidr"
(网络用户界面) -
Cloud Console
命令,如下所示:
gcloud
免责声明!
- 在上一个命令(描述集群)中输入值
gcloud compute --project=PROJECT-ID firewall-rules create pod-to-vm \ --direction=INGRESS --priority=1000 --network=default \ --action=ALLOW --rules=tcp:80 --source-ranges=clusterIpv4Cidr \ --target-tags=pod-traffic
- 您需要将
clusterIpv4Cidr
添加到您的pod-traffic
网络标签中!
之后,您可以生成一个Pod,并检查是否可以与VM's
通信:
-
VM
-
$ kubectl run -it ubuntu --image=ubuntu -- /bin/bash
您可以通过以下任一方式与$ apt update && apt install -y curl dnsutils
的{{1}}窗格进行通信:
- 您的
VM
的IP地址:
GKE
- 您的
VM
(root@ubuntu:/# curl IP_ADDRESS REDACTED <p><em>Thank you for using nginx.</em></p> REDACTED
)的名称:
VM
您还可以通过运行以下命令来检查名称是否正确解析:
nginx
其他资源: