【问题标题】:How to connect to a GKE service from GCE using internal IPs如何使用内部 IP 从 GCE 连接到 GKE 服务
【发布时间】:2021-02-04 13:31:01
【问题描述】:

我在 GKE 中部署了一个 Nginx 服务,并暴露了一个 NodePort,我只想通过内部 IP 地址从我的 Compute Engine 实例连接它。当我尝试使用集群 IP 连接到 Nginx 时,我只会收到超时。

我认为 clusterIP 只能在集群内部访问,但是当我激活 NodePort 时可能会工作。

NodePort 和 ClusterIP 的区别我不是很清楚。

【问题讨论】:

  • ClusterIP 只能在集群内部访问。如果您想从外部访问它,您需要使用NodePortLoadBalancer。 Kubernetes 文档中的 NodePort 示例 - Use a Service to Access an Application in a Cluster。您可以使用 curl 进行测试。 curl http://<public-node-ip>:<node-port> 请记住,您还需要配置防火墙并使用正确的节点 ip。如果您可以共享您的配置(没有 PII/敏感数据),那么为您提供帮助会更容易。

标签: kubernetes google-compute-engine google-kubernetes-engine


【解决方案1】:

背景

您可以使用NodePortLoadBalancer 在集群外部公开您的应用程序。 ClusterIP 只允许在集群内部进行连接,默认为Service type

  • 集群IP:

在集群内部 IP 上公开服务。选择此值使服务只能从集群内访问。这是默认的服务类型

  • 节点端口:

在每个节点的 IP 上的静态端口(NodePort)上公开服务。自动创建 NodePort 服务路由到的 ClusterIP 服务。您可以通过以下请求从集群外部联系 NodePort 服务:。

  • 负载平衡器

使用云提供商的负载平衡器将服务公开到外部。自动创建外部负载均衡器路由到的 NodePort 和 ClusterIP 服务。

简而言之,当您使用NodePort 时,您需要使用NodePublicIP:NodePort。当您使用LoadBalancer 时,它将创建Network LBExternalIP

在您的 GKE 集群中,您有一个名为 VPC - Virtual Private Cloud 的东西,它为您的基于云的资源和服务提供全球、可扩展和灵活的网络。

解决方案

使用 VPC-Native 集群 机智VPC-native clusters 您将能够直接访问 Pod 的 IP。您需要创建subnet 才能执行此操作。完整指南可以找到here

使用 VPC 对等 如果您想从 GKE 中的 2 个不同项目进行连接,则需要使用 VPC Peering

使用 NodePort 从集群外部访问

如果您想从外部访问您的 nginx 服务,您可以使用NodeIP:NodePortNodeExternalIP(请记住,此节点上必须有应用程序 pod。如果您有 3 个节点且只有 1 个应用程序副本,则必须使用部署此 pod 的NodeExternalIP。另一个节点,您需要允许NodePort访问Firewall

$ kubectl get nodes -o wide
NAME                                       STATUS   ROLES    AGE     VERSION             INTERNAL-IP   EXTERNAL-IP     OS-IMAGE                             KERNEL-VERSION   CONTAINER-RUNTIME
gke-cluster-1-default-pool-faec7b51-n5hm   Ready    <none>   3h23m   v1.17.14-gke.1600   10.128.0.26   23.236.50.249   Container-Optimized OS from Google   4.19.150+        docker://19.3.6

$ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
nginx        NodePort    10.8.9.10    <none>        80:30785/TCP   39m

$ curl 23.236.50.249:30785
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

【讨论】:

  • 感谢您的详细回答。
【解决方案2】:

集群IP地址只能在集群内访问;所以这就是它给出超时消息的原因。 Nodeport 用于在集群的每个节点的公共 IP 上暴露一个端口;所以它可能会起作用。

【讨论】:

    猜你喜欢
    • 2020-01-01
    • 2019-06-11
    • 2021-09-14
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多