Kubernetes Dashboard に接続する Ingress がありますが、アクセスしようとすると 400 エラーが発生します。
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: kubernetes-dashboard
namespace: kubernetes-dashboard
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/auth-tls-verify-client: "false"
nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/16"
spec:
tls:
- hosts:
- kube.example.com
secretName: dashboard-tls # confirmed is valid LE cert
rules:
- host: kube.example.com
http:
paths:
- backend:
serviceName: kubernetes-dashboard
servicePort: 443
これにより、nginx ポッドで 400 エラーが発生します。
2020/08/28 01:25:58 [エラー] 2609#2609: *795 readv() が失敗しました (104: ピアによって接続がリセットされました)。アップストリームの読み取り中、クライアント: 10.0.0.25、サーバー: kube.example.com、リクエスト: "GET / HTTP/1.1"、アップストリーム: "http://10.42.0.2:8443/"、ホスト: "kube.example.com"
10.0.0.25 - - [2020年8月28日:01:25:58 +0000] "GET / HTTP/1.1" 400 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0" "-"
関連する場合、Helm Chartを通じてデプロイされた私のnginx設定nginx-stable/nginx-ingress
## nginx configuration
## Ref: https://github.com/kubernetes/ingress/blob/master/controllers/nginx/configuration.md
##
controller:
config:
entries:
hsts-include-subdomains: "false"
ssl-ciphers: "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"
ssl-protocols: "TLSv1.1 TLSv1.2"
ingressClass: nginx
service:
externalTrafficPolicy: Local
annotations:
metallb.universe.tf/address-pool: default
defaultBackend:
enabled: true
tcp:
22: "gitlab/gitlab-gitlab-shell:22"
答え1
必要なのは、サービスイングレスにこの注釈を追加することだけです
annotations:
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
nginx.ingress.kubernetes.io/configuration-snippet: |-
proxy_ssl_server_name on;
proxy_ssl_name $host;