Traefik — Проблема С Ssl При Доступе К Панели Управления Kubernetes

  • Автор темы Aldina32
  • Обновлено
  • 22, Oct 2024
  • #1

Я настраиваю кластер Kubernetes (используя microk8s) и менеджер сертификатов. Сертификаты отлично работают с информационной панелью traefik и другими сайтами, но у меня проблема с информационной панелью kubernates, поскольку она уже подключена к серверу через SSL (служба находится на порту 443), и в настоящее время я выставляю сертификат Let'sEncrypt.

Когда я пытаюсь получить доступ к панели мониторинга, журналы модуля панели мониторинга:

 
 apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:

name: dashboard-k8s

namespace: kube-system
spec:

entryPoints:

- websecure

routes:

- match: "Host(`k.example.com`)"

kind: Rule

services:

- name: kubernetes-dashboard

port: 443

tls:

secretName: k8s-dashboard-http-cert
 

IngressRoute I'm using is:

2021/06/17 07:43:20 http: TLS handshake error from 213.215.191.83:39484: remote error: tls: bad certificate 2021/06/17 07:43:23 http: TLS handshake error from 213.215.191.83:39500: remote error: tls: bad certificate

У меня нет четкого представления о том, как должен работать SSL в этом сценарии.

Было бы безопасно, чтобы информационная панель обслуживалась на 80, а SSL отключался на traefik?

Aldina32


Рег
05 Aug, 2020

Тем
97

Постов
190

Баллов
695
  • 25, Oct 2024
  • #2

Существует несколько способов открыть Dashboard через traefik.

  1. Traefik завершает HTTPS от клиента, и когда клиент открывает новый HTTPS-запрос к Dashboard.
 
 
 
 
 
 
 
 
 
 
 
 ---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:

name: kube-dashboard

namespace: kubernetes-dashboard
spec:
...
routes:
...

services:

- name: kubernetes-dashboard

namespace: kubernetes-dashboard

port: 443

serversTransport: mytransport
 

Это то, что вы используете. Проблема с вашей конфигурацией заключается в том, что во втором сеансе Traefik проверит сертификат TLS Dashboard.
Если сертификат Dashboard не подписан ни одним центром сертификации в списке Traefik, соединение закрывается, а затем Dashboard выдает сообщение об ошибке.
Если вы хотите использовать этот сценарий, вам нужно пропустить проверку сертификата Dashboard или добавить сертификат Dashboard в список доверенных центров сертификации Traefik.
Приведенная ниже конфигурация работает без проверки сертификата Dashboard.

--- apiVersion: traefik.containo.us/v1alpha1 kind: ServersTransport metadata: name: mytransport namespace: kube-system spec: rootCAsSecrets: - <yourca>
  1. Traefik передает трафик TLS на Dashboard без какой-либо обработки.
kubectl -n kube-system create secret generic <yourca> --from-file=ca.crt=<your ca open pem key>

В этом сценарии Traefik не выполняет терминацию TLS, трафик передается на Dashboard в том виде, в каком он есть.
Это работает для меня.

spec: containers: - args: - --auto-generate-certificates - --namespace=kubernetes-dashboard - --tls-cert-file=/tls.crt - --tls-key-file=/tls.key
  1. Traefik завершает HTTPS от клиента и открывает новый простой HTTP-запрос к Dashboard.
kubectl edit -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml

В этом сценарии Dashboard необходимо обеспечить простое завершение HTTP.
Я не уверен, поддерживает ли это Dashboard.

 

WoTofMoD


Рег
22 Jul, 2014

Тем
88

Постов
207

Баллов
667
  • 25, Oct 2024
  • #3

Есть 4-й способ:

  • Попросите панель управления Kube использовать ваш сертификат CA (а не самостоятельно сгенерированный):
kubectl -n kubernetes-dashboard create secret tls kubernetes-dashboard-certs --cert=<your cert open key pem> --key=<your cert private key>
  • Удалить собственные сертификаты панели управления kube:
kubectl -n kubernetes-dashboard delete secret kubernetes-dashboard-certs
  • Добавьте сертификат из вашего центра сертификации:
+-------------+ +-------------+ +-------------+ | Client -------HTTPS--------- Traefik ---------HTTP-------- Dashboard | +-------------+ +-------------+ +-------------+
  • Отредактируйте файл развертывания панели управления kube для использования вашего ключа:
apiVersion: traefik.containo.us/v1alpha1 kind: IngressRouteTCP metadata: name: dashboard-k8s namespace: kube-system spec: entryPoints: - websecure routes: - match: HostSNI(`k.example.com`) services: - name: kubernetes-dashboard namespace: kubernetes-dashboard port: 443 tls: passthrough: true
  • добавьте tls-cert-file/tls-key-file в спецификацию контейнера, как показано ниже:
+-------------+ +-------------+ +-------------+ | Client -------HTTPS-------Traefik(passthrough)---------------- Dashboard | +-------------+ +-------------+ +-------------+
  • Попросите Traefik использовать ваш центр сертификации для проверки сертификатов панели управления Kube (должно перейти в пространство имен kube-system с именем ключа ca.crt).
apiVersion: traefik.containo.us/v1alpha1 kind: ServersTransport metadata: name: mytransport namespace: kube-system spec: serverName: "k.example.com" insecureSkipVerify: true --- apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: dashboard-k8s namespace: kube-system spec: entryPoints: - websecure routes: - match: "Host(`k.example.com`)" kind: Rule services: - name: kubernetes-dashboard port: 443 serversTransport: mytransport tls: secretName: k8s-dashboard-http-cert
  • Изменить серверный транспорт
+-------------+ HTTPS +-------------+ HTTPS +-------------+ | Client -----(session 1)----- Traefik ------(session 2)---- Dashboard | +-------------+ +-------------+ +-------------+
 

Султан Муталимов


Рег
28 Oct, 2020

Тем
65

Постов
211

Баллов
576
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно