
Задача:
Получить доступ к 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.