首页 > 解决方案 > 使用 Google Cloud Code ItelliJ 时如何让 Google Kubernetes Engine LoadBalancer Service 接收外部流量?

问题描述

我有一个在端口 80 上提供内容的工作 GKE 集群。如何让负载均衡器服务在外部(区域保留)静态 IP 111.222.333.123 上提供内容?

我看到kubectl get service表明外部静态IP注册成功。外部 IP 确实响应 ping 请求。

NAME            TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP      10.16.0.1     <none>        443/TCP        17h
myapp-cluster   NodePort       10.16.5.168   <none>        80:30849/TCP   84m
myapp-service   LoadBalancer   10.16.9.255   111.222.333.123   80:30879/TCP   6m20s

此外,Google Cloud Platform 控制台显示转发规则已建立并正确引用 GKE 目标池。

我正在使用的部署和服务清单如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: myapp
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
      environment: sandbox
  template:
    metadata:
      labels:
        app: myapp
        environment: sandbox
    spec:
      containers:
        - name: myapp
          image: myapp
          imagePullPolicy: Always 
          ports:
            - containerPort: 8080
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
    environment: sandbox
  ports:
    - port: 80
      targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "111.222.333.123" 

相关的 skaffold 配置文件供参考:

apiVersion: skaffold/v2beta18
kind: Config
metadata:
  name: myapp
build:
  artifacts:
  - image: myapp
    context: .
    docker: {}
deploy:
  kubectl:
    manifests:
    - gcloud_k8_staticip_deployment.yaml

使用 Google Cloud Code 运行此配置时,我缺少什么以允许流量到达 GKE 集群?

抱歉,如果以前有人问过这个问题。如果我错过了复习问题的正确解决方案,我很乐意提供指点。

标签: kubernetesnetworkinggoogle-cloud-platformgoogle-kubernetes-enginegoogle-cloud-code

解决方案


我复制了您的设置并遇到了与您相同的问题(能够 ping 服务 IP 但无法从浏览器连接到它)。

然后我将部署容器端口更改为 80,将服务目标端口更改为 80,将服务端口更改为 8080,它工作正常,然后我能够使用服务 IP 从浏览器连接到部署。

部署清单文件: 从部署清单文件:

服务清单文件: 从服务清单文件


推荐阅读