我正在我的kubernetes集群上配置gce ingress并且我将Django应用程序指定为默认后端 . 该应用程序强制执行HTTPS,因此如果您尝试执行简单的HTTP请求,Django将返回301.显然,HTTP运行状况检查不会通过 . 我正在关注此example以启用HTTPS运行状况检查 . 一旦生成 Health 检查,我手动编辑了计算引擎中的路径,但是从Django应用程序日志中看来它似乎没有让入口工作 .
在这种情况下,如何使 Health 检查工作?
组态:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.global-static-ip-name: web-static-ip
spec:
tls:
- hosts:
- foo.domain.it
secretName: production-tls
backend:
serviceName: app
servicePort: app-https
apiVersion: v1
kind: Service
metadata:
name: app
annotations:
service.alpha.kubernetes.io/app-protocols: '{"app-https":"HTTPS"}'
labels:
component: app
role: web
spec:
type: NodePort
ports:
- port: 12345
targetPort: 8000
protocol: TCP
name: app-https
selector:
component: app
role: web
type: LoadBalancer
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: app
labels:
component: app
role: web
spec:
replicas: 1
template:
metadata:
labels:
component: app
role: web
spec:
containers:
- name: app
image: [my-image]
imagePullPolicy: Always
ports:
- containerPort: 8000
envFrom:
- configMapRef:
name: app-config
3 回答
要检查的事情:
1)Django应用程序是否实际上在端口8000上侦听HTTPS(您还没有为应用程序本身指定TLS证书机密)?
2)您尚未为应用程序指定就绪探测器(也用于GCE HTTP LB运行状况检查),请参阅您为配置HTTPS运行状况检查而发布的示例:https://github.com/kubernetes/ingress-gce/blob/master/examples/backside-https/app.yaml
当您单击运行状况检查(网络服务>负载均衡器>单击您的运行状况检查名称)时,它在“端口”下显示了什么?
它必须是NodePort的值 .
当您运行以下内容时,服务'app-https'的NodePort值是多少?
它应该生成一个包含这样的输出:
在此示例中,32605将是NodePort,这是应该在运行状况检查的“端口”部分中的值 .
作为一种解决方法,我禁用了
DJANGO_SECURE_SSL_REDIRECT
并强制入口在GCE入口的情况下仅接受HTTPS请求 .kubernetes.io/ingress.allow-http: "false"
如果你使用NGINX作为入口只需设置
nginx.ingress.kubernetes.io/ssl-redirect: "True"