Включение доступа к панели управления Kubernetes через внешний VIP или плавающий IP

У меня есть кластер Kubernetes с топологией ниже

Я развернул панель управления Kubernetes в кластере и могу получить доступ к панели управления с помощью прокси-сервера kubectl.

Но когда я пытаюсь получить доступ к панели управления через плавающий IP / VIP, используя URL-адрес:

https://<FloatingIP>:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login

Я получаю следующий ответ в браузере

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get resource \"services/proxy\" in API group \"\" in the namespace \"kube-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "https:kubernetes-dashboard:",
    "kind": "services"
  },
  "code": 403
}

Я понимаю, что проблема связана с RBAC в Kubernetes, и немного читал по этой теме, но мне все еще неясно, что нужно сделать, чтобы решить эту проблему в основной кластерной реализации. Мне удалось успешно открыть Dashboard на одном главном устройстве - настройка нескольких узлов с доступом NodePort, но это не удалось при настройке кластерного мастера.

Я также открыт для лучших предложений по внедрению Dashboard в этой топологии.

Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация


person Sujith Shajee    schedule 06.09.2019    source источник
comment
Вы хотите разрешить анонимный доступ к панели управления, чтобы любой, кто имеет доступ к FloatingIP, мог видеть панель?   -  person Amit Kumar Gupta    schedule 07.09.2019
comment
@AmitKumarGupta - Если есть возможность доступа без включения анонимного пользователя, я хотел бы это учитывать. На данный момент, поскольку плавающий IP-адрес ограничен внутренней подсетью, я бы продолжил, выбрав анонимный вариант, предоставленный ниже посредством Hang, и ограничил разрешенные глаголы.   -  person Sujith Shajee    schedule 07.09.2019


Ответы (1)


Вам нужно будет создать роль кластера, чтобы предоставить разрешение kubernetes-dashboard и привязать его к system: anonymous user, как указано ниже.

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kubernetes-dashboard-anonymous
rules:
- apiGroups: [""]
  resources: ["services/proxy"]
  resourceNames: ["https:kubernetes-dashboard:"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- nonResourceURLs: ["/ui", "/ui/*", "/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/*"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-anonymous
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubernetes-dashboard-anonymous
subjects:
- kind: User
  name: system:anonymous

Изменить: чтобы применить эти изменения, сохраните их в файле .yaml (например, clusterrole.yaml) и запустите

kubectl apply -f clusterrole.yaml
person Hang Du    schedule 07.09.2019
comment
Спасибо @HangDu за это решение. В моем контексте это приемлемое решение. Но если у вас есть какие-либо идеи о том, как заставить эту работу работать в производственной среде, я бы тоже хотел это услышать. - person Sujith Shajee; 07.09.2019
comment
@SujithShajee Я бы ограничил доступ к плавающему IP-адресу с сетевого уровня, в то же время доступ к службе приборной панели не означает доступ к приборной панели с использованием прохождения аутентификации приборной панели. - person Hang Du; 07.09.2019
comment
Со вчерашнего дня сидел, чтобы решить эту проблему ... Ты буквально сэкономил мне много времени. Большое спасибо. - person Sercan Samet Savran; 03.02.2021
comment
Это где-то в документации искал определение роли - person zenin; 26.04.2021