【发布时间】:2020-05-01 12:47:16
【问题描述】:
我的健康检查因以下设置而失败。
nginx.conf
user root;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name subdomain.domain.com
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
server {
listen 80;
auth_basic off;
}
server {
listen 2222;
auth_basic off;
location /healthz {
return 200;
}
}
}
码头文件
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
VOLUME /usr/share/nginx/html
COPY /server/nginx.conf /etc/nginx/
COPY /server/htpasswd /etc/nginx/.htpasswd
CMD ["nginx", "-g", "daemon off;"]
EXPOSE 80
EXPOSE 2222
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: my-namespace
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: gcr.io/GOOGLE_CLOUD_PROJECT/my-app
ports:
- containerPort: 80
- containerPort: 2222
livenessProbe:
httpGet:
path: /healthz
port: 2222
readinessProbe:
httpGet:
path: /healthz
port: 2222
当我删除 nginx.conf 中的“server_name”行并删除第二个服务器块时,它肯定有效。 这可能是入口/负载均衡器的问题,因为我不知道更新需要多长时间(昨天几分钟后,我经历了一个健康的 pod 变得不健康)。使用 Google 自己的入口控制器(不是 NGINX 入口!)在 Google Kubernetes Engine (GKE) 上运行它
我做错了什么?
【问题讨论】:
-
你能显示失败的日志吗?它是立即失败还是仅在一段时间后失败?
-
除了日志之外,我们还需要确保当
subdomain.domain.com/healthz被定位时,有一个到2222端口的路由。当您删除该行时它会起作用,因为它可能开始将目标视为本地主机。请发布服务和入口 yaml,以便我们进一步调查
标签: docker nginx kubernetes google-kubernetes-engine basic-authentication