Kubernetes — Dashboard через service по HTTPS (AWS EKS)

Задача:

Получить доступ к Kubernetes Dashboard по доменному имени, а не используя "kubectl proxy". Так же подключение должно осуществляться по HTTPS, но при этом вести на внутренний локальный адрес, доступный только через VPN, и не используя для этого никаких Ingress'ов.

 

Редактируем деплоймент "kubernetes-dashboard":

kubectl edit deployments.apps -n kubernetes-dashboard kubernetes-dashboard

 

Приводим аргументы к следующему виду:

    spec:
      containers:
      - args:
        - --namespace=kubernetes-dashboard
        - --enable-insecure-login
        - --insecure-port=8443

 

А так же для "livenessProbe" меняем "scheme: HTTPS" на "scheme: HTTP":

        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /
            port: 8443
            scheme: HTTP
          initialDelaySeconds: 30
          periodSeconds: 10

 

Теперь дашборд будет доступен по HTTP.

В консоли AWS переходим в "Certificate Manager", выбираем регион, в котором развернут EKS и делаем запрос на сертификат для нужного домена. После того, как сертификат валидирован, копируем его ARN.

 

Создаем манифест с Kubernetes сервисом.

kubernetes-dashboard-internal.yaml:

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: 'arn:aws:acm:<AWS_REGION>:<ACCOUNT_ID>:certificate/<CERTIFICATE_ID>'
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "*"
  name: kubernetes-dashboard-internal
  namespace: kubernetes-dashboard
spec:
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: LoadBalancer

 

Применим его:

kubectl apply -f kubernetes-dashboard-internal.yaml

 

Теперь остается только создать ALIAS запись в Route53 на внутреннее имя созданного LoadBalancer'а, посмотреть его имя можно так:

kubectl get svc -n kubernetes-dashboard kubernetes-dashboard-internal

 

Теперь из внутренних сетей AWS или используя VPN, по доменному имени будет доступен Kubernetes Dashboard.

0 0 vote
Article Rating

Метки: Метки

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments