Вопрос или проблема
У меня есть кластер microk8s v1.28.14, и я хочу использовать kubernetes-dashboard.
Я включил панель управления с помощью microk8s enable dashboard
, под и сервис панели управления созданы в пространстве имен ‘kube-system’, curl -k https://10.152.183.43
на сервисе работает.
Теперь я хочу иметь возможность внешнего доступа к моей панели управления. Я использую Cloudflare для своего домена с переадресацией HTTPS и гибкими настройками TLS.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubernetes-dashboard
namespace: kube-system
spec:
rules:
- host: cluster.my-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443
Ingress сам выглядит нормально:
Name: kubernetes-dashboard
Labels: <none>
Namespace: kube-system
Address: 127.0.0.1
Ingress Class: public
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
cluster.my-domain.com
/ kubernetes-dashboard:443 (10.1.206.212:8443)
Annotations: <none>
Events: <none>
Когда я пытаюсь получить доступ к своей панели управления (`curl -k https://cluster.my-domain.com’), я получаю следующую ошибку:
Клиент отправил HTTP-запрос на HTTPS-сервер
Есть идеи, как это можно решить?
Ответ или решение
Это сообщение об ошибке "Client sent an HTTP request to an HTTPS server" указывает на то, что ваш Ingress неправильно обрабатывает запросы HTTPS. Давайте рассмотрим, как можно решить эту проблему и правильно настроить доступ к Kubernetes Dashboard через Ingress.
Шаг 1: Проверка конфигурации Ingress
В конфигурации Ingress, которую вы предоставили, у вас установлен сервис kubernetes-dashboard
, который слушает на порту 443. Однако Kubernetes Dashboard по умолчанию работает на порту 8443. Ваша настройка может выглядеть следующим образом:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubernetes-dashboard
namespace: kube-system
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- host: cluster.my-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 8443 # Измените на 8443
Шаг 2: Установка Ingress Controller
Убедитесь, что у вас установлен Ingress Controller, такой как NGINX Ingress. Если вы еще не установили его, выполните следующие команды:
microk8s enable ingress
Шаг 3: Настройка HTTPS
Поскольку вы используете Cloudflare с перенаправлением HTTPS и гибкими настройками TLS, вы можете настроить Ingress для поддержки HTTPS. Убедитесь, что вы добавили необходимые аннотации к вашему Ingress:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header X-Forwarded-Proto $scheme;
Шаг 4: Создание TLS-сертификата
Для работы с HTTPS вам нужен TLS-сертификат. Если у вас уже есть сертификат, вы можете использовать его. В противном случае вы можете создать временный секрет с самоподписанным сертификатом:
kubectl create secret tls kubernetes-dashboard-tls --cert=path/to/tls.crt --key=path/to/tls.key -n kube-system
И затем добавьте аннотацию для использования этого секрета в вашем Ingress:
tls:
- hosts:
- cluster.my-domain.com
secretName: kubernetes-dashboard-tls
Полная конфигурация Ingress
Теперь ваша полная конфигурация Ingress должна выглядеть следующим образом:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubernetes-dashboard
namespace: kube-system
annotations:
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
tls:
- hosts:
- cluster.my-domain.com
secretName: kubernetes-dashboard-tls
rules:
- host: cluster.my-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 8443
Шаг 5: Проверка доступа
После применения изменений проверьте доступность вашего Kubernetes Dashboard с помощью:
curl -k https://cluster.my-domain.com
Или откройте браузер и введите в адресной строке https://cluster.my-domain.com
.
Заключение
Следуя этим шагам, вы должны решить проблему с ошибкой "Client sent an HTTP request to an HTTPS server" и получить доступ к Kubernetes Dashboard через Ingress с поддержкой HTTPS. Если возникнут дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.