У нас есть два подхода к открытию панели инструментов: 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
k8s.mydomain.com
) && PathPrefix (/dashboard
) - person codeaprendiz   schedule 02.04.2020tag
Traefik и указать нужное правило создать / изменить. - person Will R.O.F.   schedule 03.04.2020