Kubernetes 대시보드가 ​​Nginx Ingress Controller와 작동하지 않음, "클라이언트가 HTTPS 서버를 통해 http 요청을 보냈습니다." 오류

Kubernetes 대시보드가 ​​Nginx Ingress Controller와 작동하지 않음, "클라이언트가 HTTPS 서버를 통해 http 요청을 보냈습니다." 오류

시작하기 전에: 여기에 질문을 게시하기 전에 이와 관련된 모든 게시물을 보았지만 제안된 솔루션 중 어느 것도 나에게 도움이 되지 않았습니다. 다음 주석을 추가하지 않아도 도움이 되었습니다.

    nginx.ingress.kubernetes.io/backend-protocol: HTTPS

문제:Nginx Ingress Controller에서 Kubernetes 대시보드가 ​​작동하도록 할 수 없습니다. 수신 URL을 방문할 때 항상 "클라이언트가 HTTPS 서버를 통해 http 요청을 보냈습니다"라는 오류가 발생합니다.

소프트웨어 버전:

    helm kubernetes dashboard chart version: 6.0.8
    nginx ingress version: 0.16.1 (nginx-stable)

Nginx 컨트롤러는 다음과 같이 활성화됩니다.활성화TLSPassthrough=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

Kubernetes 대시보드용 Nginx Controller에서 생성된 결과 구성은 다음과 같습니다.

    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;
       }
    }

"proxy_pass"(예: https://kubernetes-dashboard-kubernetes-dashboard-........-443)에서 http url을 https로 변경하여 위 구성을 수동으로 변경하면 k8s 대시보드가 ​​작동하는 것을 관찰했습니다. 내가 방문하면 괜찮아https://k8s-dashboard.hpsc.prod.mycompany.com브라우저에서.

누군가 내가 문제를 해결하도록 도와줄 수 있나요?

관련 정보