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