如何使用内部ip从GCE连接到GKE服务



我有一个Nginx服务部署在GKE与NodePort暴露,我想从我的计算引擎实例通过内部IP地址连接它。当我尝试用集群IP连接到Nginx时,我只收到Timeout.

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

我不太清楚NodePort和ClusterIP的区别。

Background

你可以使用NodePort或LoadBalancer在集群外公开你的应用程序。ClusterIP只允许在集群内部连接,并且它是默认的服务类型。

  • ClusterIP:

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

  • NodePort:

在静态端口(NodePort)上公开每个节点的IP上的服务。系统会自动创建ClusterIP服务,NodePort服务会路由到该服务。您可以通过请求:.

从集群外部联系NodePort服务。
  • loadbalance

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

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

在你的GKE集群中,你有一个叫做VPC的东西——虚拟私有云,它为你的基于云的资源和服务提供网络,这是全球性的,可扩展的,灵活的。

解决方案使用VPC-Native CLuster使用vpc本地集群,您将能够直接访问Pod的ip。为此,您需要创建subnet。完整的指南可以在这里找到

使用VPC对等如果您想从GKE中的两个不同项目连接,您需要使用VPC对等连接。

使用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>

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

最新更新