背景
您可以使用NodePort 或LoadBalancer 在集群外部公开您的应用程序。 ClusterIP 只允许在集群内部进行连接,默认为Service type。
在集群内部 IP 上公开服务。选择此值使服务只能从集群内访问。这是默认的服务类型
在每个节点的 IP 上的静态端口(NodePort)上公开服务。自动创建 NodePort 服务路由到的 ClusterIP 服务。您可以通过以下请求从集群外部联系 NodePort 服务:。
使用云提供商的负载平衡器将服务公开到外部。自动创建外部负载均衡器路由到的 NodePort 和 ClusterIP 服务。
简而言之,当您使用NodePort 时,您需要使用NodePublicIP:NodePort。当您使用LoadBalancer 时,它将创建Network LB 和ExternalIP。
在您的 GKE 集群中,您有一个名为 VPC - Virtual Private Cloud 的东西,它为您的基于云的资源和服务提供全球、可扩展和灵活的网络。
解决方案
使用 VPC-Native 集群
机智VPC-native clusters 您将能够直接访问 Pod 的 IP。您需要创建subnet 才能执行此操作。完整指南可以找到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>