【问题标题】:How to Make Google Kubernetes Engine LoadBalancer Service Receive External Traffic When Using Google Cloud Code ItelliJ?使用 Google Cloud Code ItelliJ 时如何让 Google Kubernetes Engine LoadBalancer Service 接收外部流量?
【发布时间】:2021-09-27 03:16:50
【问题描述】:

我的 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 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 集群?

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

【问题讨论】:

  • 我不是 GKE 上的导出,但我认为您的服务当前正在侦听 111.222.333.123:30879,因为这是为您的负载均衡器服务分配的端口。通常工作流程是在 Kubernetes 上设置一个入口控制器。通过负载均衡器类型服务公开它。这应该创建一个指向入口控制器的谷歌负载均衡器。然后定义入口资源,将流量路由到您的内部服务,您的应用程序应该可以通过“loadbalancer-url/path-defined-in-ingress”访问
  • 我特别想避免 Ingress 并使用此处描述的“使用服务”方法:cloud.google.com/kubernetes-engine/docs/tutorials/…
  • 我不确定我能不能帮到你很多。但是,由于您服务的类型 LoadBalancer,谷歌应该为您创建一个负载均衡器。你能确认一下吗?并尝试访问它?
  • 是的,负载平衡器已启动并正在运行,IP 在那里并在外部路由。 Google Cloud Platform 还在创建正确的引用,将外部 IP 与内部 GKE 链接起来。但是,仍然没有 HTTP 流量通过网络。
  • hmmm 不幸的是,我在这里不知所措。我猜是一些 GKE 专家拯救这一天的时间。抱歉,我无法提供更多帮助

标签: kubernetes networking google-cloud-platform google-kubernetes-engine google-cloud-code


【解决方案1】:

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

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

部署清单文件:

服务清单文件:

【讨论】:

  • 嗯,这很奇怪,因为在我的示例中容器和负载均衡器目标端口已经匹配。我的问题确实是 IDE 有点混乱
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多