【发布时间】:2021-05-25 20:10:18
【问题描述】:
当在端口 80 上的 pod 内进行 curl 时,响应很好。 在机器 IP 和 30803 端口上通过 Kubernetes 服务在容器外调用 curl,偶尔会出现“连接被拒绝”。
nginx 应用配置:
server {
listen 80;
server_name 127.0.0.1;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
root /usr/share/nginx/html;
index index.html;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
使用的 Kubernetes 部署和服务清单:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: dev
labels:
environment: dev
spec:
selector:
matchLabels:
environment: dev
replicas: 1
template:
metadata:
labels:
environment: dev
spec:
containers:
- name: web-app
imagePullPolicy: Never
image: web-app:$BUILD_ID
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: web-app-dev-svc
namespace: dev
labels:
environment: dev
spec:
selector:
environment: dev
type: NodePort
ports:
- name: http
nodePort: 30803
port: 80
protocol: TCP
targetPort: 80
【问题讨论】:
-
您应该使用 curl(-v 标志)进行一些验证。另外,执行
kubectl get pods以确保 pod 没有重新启动并且处于就绪状态。您还可以执行kubectl get services以确保只有一个服务正在使用该节点端口。这是调试的第一步。您还可以稍后查看 k8s 节点中的日志。您可能会在那里找到有关网络问题的信息。 -
完成所有调试步骤,描述/记录 pod 。 Pod 运行良好,因为它只是在做反向代理。我在想nginx镜像版本不兼容一些k8s功能,或者尝试切换到另一个webserver,看看可能是什么原因导致这种行为...
-
即使你没有真正的 Ingress 控制器,NGinx 也能很好地工作。仅当您没有域的 SSL 证书时才使用节点端口。否则一切都很容易设置
-
您正在使用标签
environment: dev。是否在 dev 命名空间中部署了其他任何具有相同标签的服务可以选择?kubectl get po --show-labels -
您是否愿意提供答案以获得更好的可见性,解释问题是什么以及您是如何解决的?我很乐意支持您的回答。
标签: docker nginx kubernetes devops nginx-reverse-proxy