
ПРЕЖДЕ ЧЕМ Я НАЧНУ: Я просмотрел все сообщения, связанные с этим, прежде чем задать свой вопрос здесь, но ни одно из предложенных решений мне не помогло — даже добавление следующей аннотации не помогло:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
Проблема:Я не могу заставить панель управления Kubernetes работать с Nginx Ingress Controller. Я всегда получаю ошибку «Клиент отправил http-запрос через HTTPS-сервер» при посещении URL-адреса входящего трафика.
Версии программного обеспечения:
helm kubernetes dashboard chart version: 6.0.8
nginx ingress version: 0.16.1 (nginx-stable)
Контроллер Nginx включен с помощьюenableTLSPassthrough=true.
Файлы конфигурации: Мой объект Ingress выглядит следующим образом:
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
hosts:
- k8s-dashboard.hpsc.prod.mycompany.com
ingressClassName: nginx
secretName: admin-user
backend:
service:
name: kubernetes-dashboard
port:
name: 443
pathType: ImplementationSpecific
paths:
- /
host: k8s-dashboard.hpsc.prod.mycompany.com
tls:
- hosts:
- k8s-dashboard.hpsc.prod.mycompany.com
secretName: nginx-custom-certificate-secret
Итоговая конфигурация, сгенерированная на панели управления Nginx Controller для Kubernetes, выглядит следующим образом:
upstream kubernetes-dashboard-kubernetes-dashboard-k8s-dashboard.hpsc.prod.mycompany.com-kubernetes-dashboard-443 {
zone kubernetes-dashboard-kubernetes-dashboard-k8s-dashboard.hpsc.prod.mycompany.com-kubernetes-dashboard-443 256k;
random two least_conn;
server 10.233.69.180:8443 max_fails=1 fail_timeout=10s max_conns=0;
}
server {
listen 80;
listen [::]:80;
listen unix:/var/lib/nginx/passthrough-https.sock ssl proxy_protocol;
set_real_ip_from unix:;
real_ip_header proxy_protocol;
ssl_certificate /etc/nginx/secrets/kubernetes-dashboard-nginx-custom-certificate-secret;
ssl_certificate_key /etc/nginx/secrets/kubernetes-dashboard-nginx-custom-certificate-secret;
server_tokens on;
server_name k8s-dashboard.hpsc.prod.mycompany.com;
set $resource_type "ingress";
set $resource_name "kubernetes-dashboard";
set $resource_namespace "kubernetes-dashboard";
if ($scheme = http) {
return 301 https://$host:443$request_uri;
}
location / {
set $service "kubernetes-dashboard";
proxy_http_version 1.1;
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
client_max_body_size 1m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering on;
proxy_pass http://kubernetes-dashboard-kubernetes-dashboard-k8s-dashboard.hpsc.prod.mycompany.com-kubernetes-dashboard-443;
}
}
Я заметил, что если я вручную изменю указанную выше конфигурацию, изменив http url на https в «proxy_pass» (например, https://kubernetes-dashboard-kubernetes-dashboard-........-443), моя панель управления k8s будет работать нормально, когда я зайду наhttps://k8s-dashboard.hpsc.prod.mycompany.comв браузере.
Может ли кто-нибудь помочь мне это исправить?