连接拒绝Kubernetes中的GCP LoadBalancer

时间:2017-11-21 08:56:34

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

当我在GCP中的Kubernetes引擎中创建部署和服务时,我没有明显的理由拒绝连接。

该服务在GCP中创建一个负载均衡器,并且所有相应的防火墙规则都已到位(允许从0.0.0.0/0到端口80的流量)。当我kubectl exec进入pod并且curl localhost:8000/我收到正确的响应时,底层服务运行正常。

此部署设置过去常常适用于其他图像,但昨天和今天我一直在

curl: (7) Failed to connect to 35.x.x.x port 80: Connection refused

可能是什么问题?我尝试多次删除并重新创建服务,没有运气。

kind: Service
apiVersion: v1
metadata:
  name: my-app
spec:
  selector:
    app: app 
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8000
---
apiVersion: apps/v1beta2 
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: my-app
        image: gcr.io/myproject/my-app:0.0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 8000

2 个答案:

答案 0 :(得分:3)

这对我来说是一个愚蠢的错误。 gunicorn服务器正在使用绑定到127.0.0.1而不是0.0.0.0,所以它无法从pod外部访问,但在我exec进入pod时工作。

我的案例中的修复是将Dockerfile的入口点更改为 CMD [ "gunicorn", "server:app", "-b", "0.0.0.0:8000", "-w", "3" ] 重建映像并更新部署。

答案 1 :(得分:0)

服务是否绑定到您的pod?什么" kubectl描述了svc my-app"说什么?

确保它在正确的端口上传输到您的pod?您也可以尝试(假设您正在使用GCP上的实例)来卷曲Pod的IP和端口,并确保其响应应该如此?

即,kubectl获取pod -o wide,将告诉你pod的IP

卷曲ipofpod:8000工作吗?