Google Kubernetes Engine LoadBalancer服务在使用Google Cloud Code ItelliJ时如何接收外部流量?

How to Make Google Kubernetes Engine LoadBalancer Service Receive External Traffic When Using Google Cloud Code ItelliJ?

我有一个工作的 GKE 集群在端口 80 提供内容服务。如何让负载均衡器服务在外部(区域保留)静态 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 云平台控制台显示转发规则已建立并正确引用 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 集群?

如果之前有人问过这个问题,我们深表歉意。如果我错过了正确的解决方案复习问题,很高兴得到指点。

据我所知,只要图像指向可访问的位置,这个问题中引用的配置实际上应该有效。我已经确认此配置可以在完全没有 IDE 的情况下使用玩具设置工作,只需使用 gcloud shell 并且一切正常。

问题源于 Google Cloud Code 在 运行 配置中配置上下文切换时更改 kubectl context 而没有任何额外警告。

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

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

部署清单文件:

服务清单文件: