Доступ к веб-интерфейсу kubernetes с удаленного клиента

У меня есть кластер, работающий на сервере Ubuntu. Я предоставляю веб-контент на сервере, работающем в кластере, через порт 80/443. К самому серверу я обращаюсь только через ssh, поэтому никакого графического интерфейса нет.

Теперь я хочу получить доступ к веб-интерфейс kubernetes для этого кластера. Во время исследования я нашел источники, которые говорят, что доступ к web ui для удаленного доступа не рекомендуется для рабочих сред. Руководства касаются только использования kubectl proxy для предоставления панели управления локальному хосту.

Есть ли решение или более-менее распространенный способ доступа к дашборду кластера, работающего на сервере?


person elp    schedule 07.01.2019    source источник
comment
Панель инструментов написана таким образом, что отказывается разговаривать с вами по незащищенному соединению, если только это не локальный хост. Это означает, что вам нужно правильно настроить свои сертификаты, чтобы использовать его. Как только вы это сделаете, это сработает. Настройка сертификатов для панели мониторинга ничем не отличается от настройки сертификатов для любого другого веб-приложения.   -  person Andrew Savinykh    schedule 08.01.2019


Ответы (5)


...
spec:
  clusterIP: 10.104.126.244
  externalIPs:
  - 192.168.64.1
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31180
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: LoadBalancer
status:

Приведенный выше сервис kubernetes-dashboard-service будет работать, перейдя по адресу https://192.168.64.1:31180 , где 192.168.64.1 — это IP-адрес вашего контроллера Kubernetes, однако есть оговорки.

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

затем беги

kubectl -n kube-system get secret

И ищите свой replicaset-controller-token-kzpmc

Затем запустите

$ kubectl -n kube-system describe secrets replicaset-controller-token-kzpmc

И скопируйте длинный токен внизу.

Name:       replicaset-controller-token-kzpmc
Namespace:  kube-system
Labels:     <none>
Annotations:    kubernetes.io/service-account.name=replicaset-controller
        kubernetes.io/service-account.uid=d0d93741-96c5-11e7-8245-901b0e532516

Type:   kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3 
person Ft00msh    schedule 14.08.2019

Если вы хотите получить доступ к своей информационной панели через внешний IP-адрес, вы можете отредактировать службу информационной панели и изменить тип на LoadBalancer, если у вас есть внешний поставщик LB, такой как GCP или AWS. Для этого отредактируйте kubernetes-dashboard сервис.

# kubectl -n kube-system edit service kubernetes-dashboard

Вы должны увидеть yaml-представление сервиса. Измените тип: ClusterIP на тип: LoadBalancer и сохраните файл. Если он уже изменен, перейдите к следующему шагу.

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
...
  name: kubernetes-dashboard
  namespace: kube-system
  resourceVersion: "343478"
  selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard-head
  uid: 8e48f478-993d-11e7-87e0-901b0e532516
spec:
  clusterIP: 10.100.124.90
  externalTrafficPolicy: Cluster
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: ClusterIP # <-- Change to LoadBalancer
status:
  loadBalancer: {}

Затем выполните приведенную ниже команду, чтобы увидеть внешний IP-адрес службы панели мониторинга Kubernetes.

# kubectl -n kube-system get service kubernetes-dashboard
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)         AGE
kubernetes-dashboard   LoadBalancer   10.23.252.164   <external-ip>   443:31720/TCP   26d

Затем просмотрите https://<external-ip>, чтобы увидеть веб-интерфейс.

Также вы можете представить свой сервис как NodePort для доступа к веб-интерфейсу через вашу подсеть

person coolinuxoid    schedule 08.01.2019
comment
Есть ли в URL что-то большее, чем просто https://IPADDRESS? Я до сих пор не могу попасть в приборную панель после такого подхода. - person TJ Zimmerman; 11.03.2019

2 вещи; 1. для прямого доступа через браузер (локальная машина) кластер k8s должен находиться в том же сетевом домене. 2. если вы не находитесь на элементе № 1, получите доступ к нему с помощью Windows RDP и используйте браузер.

person donubas    schedule 26.04.2019

Предполагая, что панель инструментов K8s уже развернута в вашем кластере, перенаправьте все запросы с локального порта вашего экземпляра Amazon EC2 на порт панели инструментов Kubernetes, выполнив следующую команду:

kubectl port-forward svc/kubernetes-dashboard -n kubernetes-dashboard 6443:443

Затем, чтобы получить доступ к порту с вашего локального компьютера с помощью туннеля SSH, выполните следующую команду:

ssh -i <EC2KeyPair.pem> ec2-user@<IP> -L 6443:127.0.0.1:6443

Укажите имя и IP-адрес файла PEM, если вы осуществляете доступ из AWS EC2. Например, ssh -i "demo.pem" [email protected] -L 6443:127.0.0.1:6443

После этого exit из вашего экземпляра EC2 и запустите:

ssh -i "demo.pem" [email protected] -L 6443:127.0.0.1:6443

И теперь вы можете открыть https://127.0.0.1:6443 в окне вашего браузера, чтобы получить доступ к панели инструментов k8s.

введите здесь описание изображения Подробную информацию см. по адресу https://aws.amazon.com/premiumsupport/knowledge-center/eks-cluster-kubernetes-dashboard/

person Steffi Keran Rani J    schedule 17.04.2021

kubectl proxy работает очень хорошо. В противном случае вы также можете изменить kubernetes-dashboard на loadbalancer/nodeport и через него получить доступ к кластеру.

Если вы используете балансировщик нагрузки и работаете с облачным провайдером, таким как AWS или Azure, вы, вероятно, можете настроить группы безопасности, чтобы разрешить доступ в определенных диапазонах IP-адресов.

Но, честно говоря, я скажу, что kubectl proxy в большинстве случаев достаточно хорош.

person Ho Man    schedule 07.01.2019
comment
О, хорошо, но как получить доступ к панели управления, которая открыта для локального хоста на сервере, с моей домашней машины? - person elp; 08.01.2019
comment
@elp kubectl proxy --address=INTERNAL_SERVER_IP_ADDRESS_HERE --accepts-host=.* - person Crono; 29.01.2021