GCP GKE 负载平衡器连接被拒绝

GCP GKE load balancer connectio refused

我正在 GKE 服务上进行部署,我发现当我尝试访问页面时显示消息

ERR_CONNECTION_REFUSED

我定义了一个部署的负载均衡服务,配置如下

这是部署的 .yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bonsai-onboarding
spec:
  selector:
    matchLabels:
      app: bonsai-onboarding
  replicas: 2
  template:
    metadata:
      labels:
        app: bonsai-onboarding
    spec:
     containers:
     - name: bonsai-onboarding
       image: "eu.gcr.io/diaphanum/onboarding-iocash-master_web:v1"
       ports:
       - containerPort: 3000

这是服务 .yaml 文件。

apiVersion: v1
kind: Service
metadata:
  name: lb-onboarding
spec:
  type: LoadBalancer
  selector:
    app: bonsai-onboarding
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000

这个工作正常,在 GKE 中一切都是绿色的:)

kubectl get pods,svc
NAME                                     READY   STATUS    RESTARTS   AGE
pod/bonsai-onboarding-8586b9b699-flhbn   1/1     Running   0          3h23m
pod/bonsai-onboarding-8586b9b699-p9sn9   1/1     Running   0          3h23m

NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)          AGE
service/kubernetes      ClusterIP      XX.xx.yy.YY      <none>         443/TCP          29d
service/lb-onboarding   LoadBalancer   XX.xx.yy.YY   XX.xx.yy.YY   3000:32618/TCP   3h

然后当我尝试连接时,错误是 ERR_CONNECTION_REFUSED

我认为是关于网络的,因为你在我的本地机器上进行了下一次测试

Ping  [load balancer IP]  --->  Correct
Telnet [Load Balancer IP] 3000  --->  Correct

从云端 shell 我将端口 3000 转发到 8080 并在其他 cloudShell 中创建 Curl http://localhost:8080,并且工作正常。

对这个问题有什么想法吗?

提前致谢

确保 containerPort 在 deployment/statefulset/pod 的规范中定义并且应用程序正在侦听该端口。还要确保您的防火墙规则没有阻止节点端口。

gcloud compute firewall-rules create myservice --allow tcp:3000

我已经稍微更改了您的部署以在我的集群上检查它,因为您的映像无法访问:

  • 部署:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: bonsai-onboarding
    spec:
      selector:
        matchLabels:
          app: bonsai-onboarding
      replicas: 2
      template:
        metadata:
          labels:
            app: bonsai-onboarding
        spec:
         containers:
         - name: bonsai-onboarding
           image: nginx:latest
           ports:
           - containerPort: 80
    
  • 服务:

    apiVersion: v1
        kind: Service
        metadata:
          name: lb-onboarding
        spec:
          type: LoadBalancer
          selector:
            app: bonsai-onboarding
          ports:
          - protocol: TCP
            port: 3000
            targetPort: 80
    

开箱即用:

kubectl get pods,svc
NAME                                     READY   STATUS    RESTARTS   AGE
pod/bonsai-onboarding-7bdf584499-j2nv7   1/1     Running   0          6m58s
pod/bonsai-onboarding-7bdf584499-vc7kh   1/1     Running   0          6m58s

NAME                    TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)        AGE
service/kubernetes      ClusterIP      10.XXX.XXX.1     <none>          443/TCP        8m35s
service/lb-onboarding   LoadBalancer   10.XXX.XXX.230   35.XXX.XXX.235   3000:31637/TCP   67s

而且我可以从任何 IP 访问 35.XXX.XXX.235:3000

Welcome to nginx!
...
Thank you for using nginx.

您可以使用以下命令检查您的应用是否可访问:

nmap -Pn $(kubectl get svc lb-onboarding -o jsonpath='{.status.loadBalancer.ingress[*].ip}')

可能是您在图像配置中 "ERR_CONNECTION_REFUSED" 出现问题的原因?我发现您的部署和负载均衡器配置没有问题。