У нас есть два подхода к представлению панели инструментов: NodePort
и LoadBalancer
.
Я продемонстрирую оба случая и некоторые из них за и против.
type: NodePort
Таким образом, ваша панель будет доступна в https://<MasterIP>:<Port>
.
- Я начну с того, что панель инструментов уже развернута и работает как 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
$ kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec": {"type": "NodePort"}}'
service/kubernetes-dashboard patched
Примечание: Вы также можно применить в формате YAML, изменив поле type: ClusterIP
на type: Nodeport
, вместо этого я хотел показать прямой подход с kubectl patch
с использованием формата 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
Примечание: Перед доступом из внешнего кластера необходимо включить группу безопасности узлов чтобы разрешить входящий трафик c через открытый порт или здесь для 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-адрес. (может взиматься дополнительная плата в зависимости от вашего плана).
Так же, как и раньше, я удалил службу и снова создал ее как кластер IP:
$ 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>
, через несколько минут должен быть назначен Publi c IP, как вы можете видеть выше.
- Вы можете получить к нему доступ, используя
https://35.232.133.138
:
Соображения безопасности:
При подключении к Dashboard всегда используется HTTPS, вы можете получать уведомление об автоматически сгенерированном сертификате при каждом вводе, если только вы не изменили его на доверенный. Вы можете найти больше здесь
Поскольку панель инструментов не предназначена для широкого доступа, я бы рекомендовал сохранить доступ с помощью Publi c IP ( или пользовательское имя DNS в случае aws, то есть: *****. us-west-2.elb.amazon aws .com).
Если вы действительно хотел бы интегрировать в ваше основное доменное имя, я бы посоветовал поместить его за другим уровнем аутентификации на вашем сайте.
Для нового доступа по-прежнему потребуется токен доступа, но никто не будет Для того чтобы открыть панель инструментов, необходимо go, вам нужно только передать IP / DNS-адрес и токен, чтобы получить к нему доступ.
Этот токен имеет Cluster-Admin Access, так что держите его в безопасности, как и пароль root.
Если у вас есть какие-либо сомнения, дайте мне знать!