当我在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
答案 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工作吗?