Как получить доступ к Kubernetes Dashboard из внешней сети - PullRequest
0 голосов
/ 28 декабря 2018

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

Я выполнил эти 2 команды, чтобы получить токен

kubectl -n kube-system get secret

kubectl -n kube-system describe secret replicaset-controller-token-2p4fk

Скопировать выводящий токен вставки в K8 Loginстр.

Я получаю эту ошибку в консоли браузера, когда нажимаю кнопку «Войти» (страница не загружается).

enter image description here

Iя запускаю k8 на внутреннем сервере с помощью команды:

kubectl proxy --address 0.0.0.0 --accept-hosts '.*'

и пытаюсь получить доступ к консоли k8 UI из внешней сети .

Failed to load resource: the server responded with a status of 401 (Unauthorized)
vendor.bd425c26.js:6 Error during global settings reload:  Object
:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/api/v1/rbac/status:1 Failed to load resource: the server responded with a status of 401 (Unauthorized)
vendor.bd425c26.js:6 Possibly unhandled rejection: {"data":"MSG_LOGIN_UNAUTHORIZED_ERROR\n","status":401,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"api/v1/rbac/status","headers":{"Accept":"application/json, text/plain, */*"}},"statusText":"Unauthorized","xhrStatus":"complete","resource":{}}

Я дажепробовал эти шаги, но не повезло, что страница не загружается при нажатии на кнопку «Войти».

$ kubectl -n kube-system get secret
# All secrets with type 'kubernetes.io/service-account-token' will allow to log in.
# Note that they have different privileges.
NAME                                     TYPE                                  DATA      AGE
deployment-controller-token-frsqj        kubernetes.io/service-account-token   3         22h

$ kubectl -n kube-system describe secret deployment-controller-token-frsqj
Name:         deployment-controller-token-frsqj
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=deployment-controller
              kubernetes.io/service-account.uid=64735958-ae9f-11e7-90d5-02420ac00002

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZXBsb3ltZW50LWN

Вот мой файл Kube / config

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTiBDRV..
    server: https://192.168.15.97:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: LS0tLS1CRUdJTiBD..
    client-key-data: LS0tLS1CRUdJTiBSU0EgUFJ..

И почемуразве я не вижу Пропустить кнопку авторизации рядом с кнопкой Подписать?

Я также попробовал эти шаги:

Выполнить следующие команды:

  1. Эта команда создаст служебную учетную запись для панели мониторинга в пространстве имен по умолчанию

    $kubectl create serviceaccount dashboard -n default

  2. Эта командадобавит правила привязки кластера к вашей учетной записи сводной панели

    kubectl создать кластерную привязку: панель управления -n по умолчанию \ --clusterrole = cluster-admin \ --serviceaccount = default: dashboard

  3. Эта команда предоставит вам токен, необходимый для входа в систему на вашей панели управления

    $kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode Может ли кто-нибудь помочь мне в этом, что я пропускаю.

Некоторые выводы: Link Команда прокси kubectl разрешает только HTTP-соединение.Для доменов, отличных от localhost и 127.0.0.1, войти в систему будет невозможно. После нажатия кнопки «Войти» на странице входа в систему ничего не произойдет.

kubectl proxy

Не поддерживает вызовы https.

Есть ли способ запустить команду kubectl proxy вместе с IP-адресом сервера Kubernetes из внешней / локальной сети Windows?

Примечание: Локальная система - это Windows 10, а K8 - это сервер Linux.Версия Docker: 18.09 & k8 Версия: v1.13.1

Спасибо,

Ответы [ 4 ]

0 голосов
/ 06 мая 2019

для входа в приборную панель в vcluster с виртуальными машинами нужен обработчик netwroks для внешних ip-контейнеров. У меня есть сообщение от этого https://piensoluegoinstalo.com/kubernetes-cluster-dashboard-on-premise/

ответы - использовать metallb

https://piensoluegoinstalo.com/kubernetes-cluster-dashboard-on-premise/
vi metallb.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.250
kubectl create -f metallb.yaml

Создайте сертификат для вашего ip вне панели мониторинга контейнера и добавьте этот преобразователь в IP-адрес разрешения файла hosts, я использовал «панель мониторинга» для имени домена

mkdir $HOME/certs
cd $HOME/certs
openssl genrsa -out dashboard.key 2048
openssl rsa -in dashboard.key -out dashboard.key
openssl req -sha256 -new -key dashboard.key -out dashboard.csr -subj '/CN=dashboard'
openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
kubectl -n kube-system create secret generic kubernetes-dashboard-certs --from-file=$HOME/certs
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml
kubectl -n kube-system edit service kubernetes-dashboard

ТИП ИЗМЕНЕНИЯ В БАЛАНСЕРЕ НАГРУЗКИ

apiVersion: v1
kind: Service
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kube-system"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
  creationTimestamp: "2019-04-24T22:21:15Z"
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
  resourceVersion: "1753"
  selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard
  uid: 4612785f-66df-11e9-8180-000c29e7b067
spec:
  clusterIP: 10.110.50.44
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31394
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: LoadBalancer
status:
{}
kubectl -n kube-system get service kubernetes-dashboard
nano admin-user.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
kubectl create -f admin-user.yaml
nano cluster-role.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
kubectl create -f cluster-role.yaml
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

https://youtu.be/nZ-CDc7PjSg

0 голосов
/ 28 декабря 2018

Полагаю, вы используете неверный секрет для Bearer Token.Как правило, вам нужно создать ServiceAccount, а затем назначить ему соответствующую роль службы через ClusterRoleBinding и авторизоваться в Dashboard, используя Bearer Token.Для получения дополнительной информации о Kubernetes Dashboard Bearer Token авторизация здесь .

0 голосов
/ 18 апреля 2019

https://github.com/kubernetes/dashboard/wiki/Accessing-Dashboard---1.7.X-and-above

У меня есть примечание:

Панель инструментов не должна быть открыта публично с помощью прокси-команды kubectl, поскольку она разрешает только HTTP-соединение.Для доменов, отличных от localhost и 127.0.0.1, войти в систему будет невозможно. После нажатия кнопки «Войти» на странице входа в систему ничего не произойдет.

0 голосов
/ 28 декабря 2018

похоже, что токен закодирован в Base64.Вы пытались расшифровать его перед вставкой в ​​поле токена?см .: https://kubernetes.io/docs/concepts/configuration/secret/#decoding-a-secret

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...