从 pod 调用集群外的应用程序
Calling an application outside cluster from a pod
Compute Engine 上有一个 Web 服务应用 运行,同一网络中有一个 GKE 集群。
集群中的Pod是否可以使用Web服务应用的内部IP地址调用Web服务应用?
您的回答将不胜感激。
谢谢。
TL;DR
是的,这是可能的。
假设您正在谈论 VM
的内部 IP 地址,您将需要创建一个允许从 pod address range
到 VM
的流量的规则。
例子
假设:
- 有一个名为:
nginx
的 Compute Engine
实例,它在端口 80
上配置为 运行。
- 在与您的
GCE
实例相同的网络中有一个 Kubernetes Engine
。
您需要检查 GKE
集群的 pod ip 地址范围。您可以通过以下任一方式完成:
Cloud Console
(网络 UI)
$ gcloud container clusters describe CLUSTER-NAME --zone=ZONE | grep -i "clusterIpv4Cidr"
防火墙规则可以通过以下任一方式创建:
Cloud Console
(网络 UI)
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
Disclaimer!
- Enter the value from last command (describe cluster) in the place of
clusterIpv4Cidr
- You will need to add
pod-traffic
to your VM's
network tags!
之后你可以生成一个 pod 并检查你是否可以与你的 VM
:
通信
$ kubectl run -it ubuntu --image=ubuntu -- /bin/bash
$ apt update && apt install -y curl dnsutils
您可以通过以下任一方式与您的 VM
和 GKE
pods 通信:
- 您的
VM
的 IP 地址:
root@ubuntu:/# curl IP_ADDRESS
REDACTED
<p><em>Thank you for using nginx.</em></p>
REDACTED
- 您的
VM
(nginx
) 姓名:
root@ubuntu:/# curl nginx
REDACTED
<p><em>Thank you for using nginx.</em></p>
REDACTED
您还可以通过运行ning检查名称是否正确解析:
root@ubuntu:/# nslookup nginx
Server: DNS-SERVER-IP
Address: DNS-SERVER-IP#53
Non-authoritative answer:
Name: nginx.c.PROJECT_ID.internal
Address: IP_ADDRESS
其他资源:
Compute Engine 上有一个 Web 服务应用 运行,同一网络中有一个 GKE 集群。
集群中的Pod是否可以使用Web服务应用的内部IP地址调用Web服务应用?
您的回答将不胜感激。
谢谢。
TL;DR
是的,这是可能的。
假设您正在谈论 VM
的内部 IP 地址,您将需要创建一个允许从 pod address range
到 VM
的流量的规则。
例子
假设:
- 有一个名为:
nginx
的Compute Engine
实例,它在端口80
上配置为 运行。 - 在与您的
GCE
实例相同的网络中有一个Kubernetes Engine
。
您需要检查 GKE
集群的 pod ip 地址范围。您可以通过以下任一方式完成:
Cloud Console
(网络 UI)$ gcloud container clusters describe CLUSTER-NAME --zone=ZONE | grep -i "clusterIpv4Cidr"
防火墙规则可以通过以下任一方式创建:
Cloud Console
(网络 UI)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
Disclaimer!
- Enter the value from last command (describe cluster) in the place of
clusterIpv4Cidr
- You will need to add
pod-traffic
to yourVM's
network tags!
之后你可以生成一个 pod 并检查你是否可以与你的 VM
:
$ kubectl run -it ubuntu --image=ubuntu -- /bin/bash
$ apt update && apt install -y curl dnsutils
您可以通过以下任一方式与您的 VM
和 GKE
pods 通信:
- 您的
VM
的 IP 地址:
root@ubuntu:/# curl IP_ADDRESS
REDACTED
<p><em>Thank you for using nginx.</em></p>
REDACTED
- 您的
VM
(nginx
) 姓名:
root@ubuntu:/# curl nginx
REDACTED
<p><em>Thank you for using nginx.</em></p>
REDACTED
您还可以通过运行ning检查名称是否正确解析:
root@ubuntu:/# nslookup nginx
Server: DNS-SERVER-IP
Address: DNS-SERVER-IP#53
Non-authoritative answer:
Name: nginx.c.PROJECT_ID.internal
Address: IP_ADDRESS
其他资源: