【问题标题】:Calling an application outside cluster from a pod从 pod 调用集群外的应用程序
【发布时间】:2020-09-30 16:56:47
【问题描述】:

在同一网络中的 Compute Engine 和 GKE 集群上运行了一个 Web 服务应用。

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

您的回答将不胜感激。

谢谢。

【问题讨论】:

    标签: gke-networking


    【解决方案1】:

    TL;DR

    是的,这是可能的。

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


    示例

    假设:

    • 有一个名为nginxCompute Engine 实例,它被配置为在端口80 上运行。
    • Kubernetes Engine 与您的 GCE 实例在同一网络内。

    您需要检查 GKE 集群的 pod ip 地址范围。你可以这样做:

    • 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
    

    免责声明!

    1. 输入上一条命令中的值(描述集群)代替clusterIpv4Cidr
    2. 您需要将pod-traffic 添加到您的VM's 网络标签中!

    之后,您可以生成一个 pod 并检查您是否可以与您的 VM 通信:

    • $ kubectl run -it ubuntu --image=ubuntu -- /bin/bash
    • $ apt update && apt install -y curl dnsutils

    您可以通过以下任一方式与 VMGKE pod 进行通信:

    • 你的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
    

    您也可以通过运行检查名称是否正确解析:

    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
    

    其他资源:

    【讨论】:

    • 太棒了!这个对我有用。感谢您详细而透彻的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2021-07-18
    • 1970-01-01
    相关资源
    最近更新 更多