如何从外部网络访问 Kubernetes Dashboard

MAX*_*MAX 8 kubernetes kubernetes-dashboard

我正在尝试使用网络外的 Token 方法访问 kubernetes Dashboard。

我运行了这两个命令来获取令牌

kubectl -n kube-system get secret

kubectl -n kube-system describe secret replicaset-controller-token-2p4fk
Run Code Online (Sandbox Code Playgroud)

将粘贴输出令牌复制到 K8 登录页面。

当我单击“登录”按钮(页面未加载)时,我收到此错误浏览器控制台。

在此处输入图片说明

我正在使用以下命令在内部服务器上运行 k8:

kubectl proxy --address 0.0.0.0 --accept-hosts '.*'
Run Code Online (Sandbox Code Playgroud)

并尝试从外部网络访问 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":{}}
Run Code Online (Sandbox Code Playgroud)

我什至尝试了这些步骤,但不幸的是,单击“登录”按钮时页面未加载。

$ 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
Run Code Online (Sandbox Code Playgroud)

这是我的 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..
Run Code Online (Sandbox Code Playgroud)

为什么我在“ 签名”按钮旁边没有看到“跳过身份验证”按钮?

我也尝试了这些步骤:

运行以下命令:

  1. 此命令将在默认命名空间中为仪表板创建一个服务帐户

    $kubectl create serviceaccount dashboard -n default

  2. 此命令会将集群绑定规则添加到您的仪表板帐户

    kubectl create clusterrolebinding dashboard-admin -n default \ --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 proxy 命令只允许 HTTP 连接。对于 localhost 和 127.0.0.1 以外的域,将无法登录。单击登录页面上的“登录”按钮后不会发生任何事情。

kubectl proxy
Run Code Online (Sandbox Code Playgroud)

不支持 https 调用。

有没有办法从外部/本地 Windows 网络运行kubectl proxy命令和 Kubernetes 服务器 IP 地址?

注意: 本地系统是 Windows 10 & K8 是 Linux 服务器。Docker 版本:18.09 & k8 版本:v1.13.1

谢谢,

Put*_*nik 8

kubectl proxy当我尝试使用普通 http 和公共 IP访问仪表板时,我遇到了这个问题。

错误详细信息:在您单击“登录”以返回 json结尾的请求之一后,在控制台和浏览器中kubectl proxy产生错误,但浏览器不显示任何错误。http: proxy error: context canceled/plugin/configMSG_LOGIN_UNAUTHORIZED_ERROR

解决方案(来源

kubectl port-forward -n kubernetes-dashboard service/kubernetes-dashboard 8443:443 --address 0.0.0.0
Run Code Online (Sandbox Code Playgroud)

当然,如果您只想将其绑定到一个接口,您可以使用您的接口 ip 而不是 0.0.0.0。然后转到https://your.external.ip:8443/,它会将您重定向到https://your.external.ip:8443/#/login并要求您提供令牌。接下来,如下所述

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret \
| awk '/^deployment-controller-token-/{print $1}') | awk '$1=="token:"{print $2}'
Run Code Online (Sandbox Code Playgroud)


小智 -1

看起来令牌是 Base64 编码的。在将其粘贴到令牌字段之前您是否尝试对其进行解码?请参阅: https: //kubernetes.io/docs/concepts/configuration/secret/#decoding-a-secret