从 pod 调用集群外的应用程序

Calling an application outside cluster from a pod

Compute Engine 上有一个 Web 服务应用 运行,同一网络中有一个 GKE 集群。

集群中的Pod是否可以使用Web服务应用的内部IP地址调用Web服务应用?

您的回答将不胜感激。

谢谢。

TL;DR

是的,这是可能的。

假设您正在谈论 VM 的内部 IP 地址,您将需要创建一个允许从 pod address rangeVM 的流量的规则。


例子

假设:

  • 有一个名为:nginxCompute 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!

  1. Enter the value from last command (describe cluster) in the place of clusterIpv4Cidr
  2. 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

您可以通过以下任一方式与您的 VMGKE 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

其他资源: