Могу ли я получить доступ к своей панели управления Kubernetes через DomainName, указывающее на конкретный сервер вместо localhost

Документ подписан на https://docs.aws.amazon.com/eks/latest/userguide/dashboard-tutorial.html

Я могу настроить панель управления и получить к ней доступ по ссылке http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#!/login

Проблема заключается в том, что «КАЖДЫЙ ПОЛЬЗОВАТЕЛЬ ДОЛЖЕН ДОСТУПИТЬ К ПРИБОРНОЙ ПАНЕЛИ СЛЕДУЮЩИМ ОДИН РАЗ».

Мне было интересно, есть ли способ, с помощью которого мы можем получить доступ к панели управления через DomainName, и каждый должен иметь доступ к ней без особой предварительной настройки.


person codeaprendiz    schedule 29.03.2020    source источник
comment
вы искали в Интернете? Я нашел это: github.com/kubernetes/dashboard/blob/master/docs/user/   -  person Amit Kumar Gupta    schedule 29.03.2020
comment
@codeaprendiz Я вижу предоставленный ответ, и ссылка выше верна, но это больше концепция, чем воспроизводимое решение. Я могу работать поэтапно, чтобы облегчить вам доступ к панели инструментов, если вам все еще нужна помощь.   -  person Will R.O.F.    schedule 30.03.2020
comment
@willrof, было бы здорово, если бы вы могли дать пошаговое решение для этого. Заранее спасибо.   -  person codeaprendiz    schedule 31.03.2020
comment
@codeaprendiz Привет, я опубликовал ответ! Если это полезно, нажмите кнопку «Проголосовать» (▲) слева от него. Если он отвечает на ваш вопрос, нажмите на галочку (✓), чтобы принять его. Таким образом, другие узнают, что вам (достаточно) помогли. Также см. Что мне делать, когда кто-то ответит на мой вопрос? Следуя этим простым правилам, вы повышаете свой собственный рейтинг репутации и в то же время время, чтобы мы были мотивированы ответить на ваши вопросы.   -  person Will R.O.F.    schedule 01.04.2020
comment
@willrof, большое спасибо за такие подробные объяснения. Я смог воспроизвести и заставить мою панель инструментов работать :) github.com/codeaprendiz/kubernetes-kitchen/tree/master/gcp/ ... мое требование - создать IngressRoute (Traefik - docs.traefik.io), чтобы я мог сопоставить с правилом, например match: Host (k8s.mydomain.com) && PathPrefix (/dashboard)   -  person codeaprendiz    schedule 02.04.2020
comment
@codeaprendiz Я рада, что это вам помогло. Что касается вашего Traefik Ingress, мне очень жаль, что я очень мало знаю о Traefik. Если бы это был Nginx Ingress, я мог бы вам помочь, в противном случае я бы посоветовал вам опубликовать новый случай с tag Traefik и указать нужное правило создать / изменить.   -  person Will R.O.F.    schedule 03.04.2020
comment
NB: тег typhoon-kubernetes предназначен для проекта Kubernetes. (Использование правильного тега вызовет уведомление для экспертов, наблюдающих за этим тегом, поэтому вы получите более быстрые ответы).   -  person Jasper Blues    schedule 05.06.2020


Ответы (2)


У нас есть два подхода к открытию панели инструментов: NodePort и LoadBalancer.

Я продемонстрирую оба случая, а также некоторые из их плюсов и минусов.


type: NodePort

Таким образом, ваша панель управления будет доступна в https://<MasterIP>:<Port>.

  • Я начну с того, что Dashboard уже развернут и работает как ClusterIP (как и ваш).
$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes-dashboard   ClusterIP   10.0.11.223   <none>        80/TCP     11m
  • Мы вносим исправления в службу, чтобы изменить ServiceType:
$ kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec": {"type": "NodePort"}}'
service/kubernetes-dashboard patched

Примечание. Вы также можете применить в формате YAML, изменив поле type: ClusterIP на type: Nodeport, вместо этого я хотел показать прямой подход с помощью _ 9_ с использованием формата JSON для исправления того же поля.

  • Теперь давайте перечислим, чтобы увидеть новый порт:
$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.0.11.223   <none>        443:31681/TCP   13m

Примечание. Перед доступом из внешнего кластера необходимо включить группу безопасности узлов, чтобы разрешить входящий трафик через открытый порт или здесь для GKE. Ниже мой пример создания правила в Google Cloud, но та же концепция применяется к EKS.

$ gcloud compute firewall-rules create test-node-port --allow tcp:31681
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/owilliam/global/firewalls/test-node-port].                                                                 
Creating firewall...done.                                                                                                                                                               
NAME            NETWORK  DIRECTION  PRIORITY  ALLOW      DENY  DISABLED
test-node-port  default  INGRESS    1000      tcp:31681        False                                                                                                                                                               

$ kubectl get nodes --output wide
NAME                                 STATUS   ROLES    AGE   VERSION         INTERNAL-IP   EXTERNAL-IP
gke-cluster-1-pool-1-4776b3eb-16t7   Ready    <none>   18d   v1.15.8-gke.3   10.128.0.13   35.238.162.157

  • И я получу к нему доступ, используя https://35.238.162.157:31681:

введите здесь описание изображения


type: LoadBalancer

Таким образом, ваша панель управления будет доступна в https://IP.

  • Используя LoadBalancer ваш облачный провайдер автоматизирует правило брандмауэра и переадресацию портов, назначая ему IP-адрес. (с вас может взиматься дополнительная плата в зависимости от вашего плана).

  • Как и раньше, я удалил службу и снова создал как clusterIP:

$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes-dashboard   ClusterIP   10.0.2.196   <none>        443/TCP   15s

$ kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec": {"type": "LoadBalancer"}}'
service/kubernetes-dashboard patched

$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   LoadBalancer   10.0.2.196   <pending>     443:30870/TCP   58s

$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)         AGE
kubernetes-dashboard   LoadBalancer   10.0.2.196   35.232.133.138   443:30870/TCP   11m

Примечание. Когда вы примените его, ВНЕШНИЙ IP-адрес будет в состоянии <pending>, через несколько минут должен быть назначен общедоступный IP-адрес, как вы можете видеть выше.

  • Вы можете получить к нему доступ, используя https://35.232.133.138:

введите здесь описание изображения


Соображения безопасности:

  • Ваше соединение с панелью мониторинга всегда осуществляется через HTTPS, вы можете получать уведомление об автоматически сгенерированном сертификате каждый раз, когда вы вводите его, если вы не измените его на доверенный. Дополнительную информацию можно найти здесь

  • Поскольку панель инструментов не предназначена для широкого доступа, я бы предложил сохранить доступ с использованием общедоступного IP-адреса (или настраиваемого имени DNS в случае aws, например: *****. Us-west-2.elb.amazonaws .com).

  • Если вы действительно хотите интегрироваться с вашим основным доменным именем, я бы предложил разместить его за другим уровнем аутентификации на вашем веб-сайте.

  • Для нового доступа по-прежнему потребуется токен доступа, но никому не нужно будет проходить этот процесс, чтобы открыть панель мониторинга, вам нужно только передать IP / DNS-адрес и токен для доступа к нему.

  • Этот токен имеет доступ администратора кластера, поэтому сохраняйте его в безопасности, как и пароль root.

Если у вас есть сомнения, дайте мне знать!

person Will R.O.F.    schedule 01.04.2020

Глубокая проблема - это аутентификация. Если вы хотите, чтобы панель управления соблюдала правила Kubernetes RBAC для пользователя, ей нужны их кредиты K8s, а это обычно сложно. Для EKS это зависит от ваших учетных данных AWS. Некоторые люди просто помещают статический набор разрешений на панель управления, а затем помещают перед ним другую, обычную веб-аутентификацию.

person coderanger    schedule 29.03.2020