如何使用内部 IP 从 GCE 连接到 GKE 服务
How to connect to a GKE service from GCE using internal IPs
我在 GKE 中部署了一个 Nginx 服务并公开了一个 NodePort,我只想通过内部 IP 地址从我的 Compute Engine 实例连接它。当我尝试使用集群 IP 连接到 Nginx 时,我只收到超时。
我认为 clusterIP 只能在集群内部访问,但当我激活 NodePort 时可能会起作用。
我不是很清楚NodePort和ClusterIP的区别
集群IP地址只能在集群内访问;所以这就是它给出超时消息的原因。 Nodeport 用于在集群的每个节点的 Public IP 上公开一个端口;所以它可能会起作用。
背景
您可以使用 NodePort or LoadBalancer. ClusterIP
allows connection only inside the cluster and it's default Service type.
在集群外部公开您的应用程序
- 集群IP:
Exposes the Service on a cluster-internal IP. Choosing this value makes the Service only reachable from within the cluster. This is the default ServiceType
- 节点端口:
Exposes the Service on each Node's IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You'll be able to contact the NodePort Service, from outside the cluster, by requesting :.
- 负载均衡器
Exposes the Service externally using a cloud provider's load balancer. NodePort and ClusterIP Services, to which the external load balancer routes, are automatically created.
简而言之,当您使用NodePort
时,您需要使用NodePublicIP:NodePort
。当您使用 LoadBalancer
时,它将创建 Network LB
和 ExternalIP
。
在您的 GKE 集群中,您有一个名为 VPC - Virtual Private Cloud 的东西,它为您的基于云的资源和服务提供全球性、可扩展且灵活的网络。
解决方案
使用 VPC-Native 集群
机智 VPC-native clusters you'll be able to reach to Pod's IPs directly. You will need to create subnet
in order to do it. Full guide can be found here
使用 VPC 对等互连
如果您想从 GKE 中的 2 个不同项目进行连接,则需要使用 VPC Peering.
使用NodePort从集群外部访问
如果您想从外部访问您的 nginx 服务,您可以使用 NodeIP:NodePort
。
NodeExternalIP
(请记住,此节点上必须有应用程序 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>
我在 GKE 中部署了一个 Nginx 服务并公开了一个 NodePort,我只想通过内部 IP 地址从我的 Compute Engine 实例连接它。当我尝试使用集群 IP 连接到 Nginx 时,我只收到超时。
我认为 clusterIP 只能在集群内部访问,但当我激活 NodePort 时可能会起作用。
我不是很清楚NodePort和ClusterIP的区别
集群IP地址只能在集群内访问;所以这就是它给出超时消息的原因。 Nodeport 用于在集群的每个节点的 Public IP 上公开一个端口;所以它可能会起作用。
背景
您可以使用 NodePort or LoadBalancer. ClusterIP
allows connection only inside the cluster and it's default Service type.
- 集群IP:
Exposes the Service on a cluster-internal IP. Choosing this value makes the Service only reachable from within the cluster. This is the default ServiceType
- 节点端口:
Exposes the Service on each Node's IP at a static port (the NodePort). A ClusterIP Service, to which the NodePort Service routes, is automatically created. You'll be able to contact the NodePort Service, from outside the cluster, by requesting :.
- 负载均衡器
Exposes the Service externally using a cloud provider's load balancer. NodePort and ClusterIP Services, to which the external load balancer routes, are automatically created.
简而言之,当您使用NodePort
时,您需要使用NodePublicIP:NodePort
。当您使用 LoadBalancer
时,它将创建 Network LB
和 ExternalIP
。
在您的 GKE 集群中,您有一个名为 VPC - Virtual Private Cloud 的东西,它为您的基于云的资源和服务提供全球性、可扩展且灵活的网络。
解决方案
使用 VPC-Native 集群
机智 VPC-native clusters you'll be able to reach to Pod's IPs directly. You will need to create subnet
in order to do it. Full guide can be found here
使用 VPC 对等互连 如果您想从 GKE 中的 2 个不同项目进行连接,则需要使用 VPC Peering.
使用NodePort从集群外部访问
如果您想从外部访问您的 nginx 服务,您可以使用 NodeIP:NodePort
。
NodeExternalIP
(请记住,此节点上必须有应用程序 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>