当Dashboard
安装完成并且能够正常访问后,将专注于为用户配置对群集资源的访问控制。从版本1.7
开始:
Dashboard
不再具有默认授予的完全管理员权限。Dashboard
工作所需的最小权限。重要信息:本说明仅针对使用
Dashboard 1.7
及更高版本的用户。如果Dashboard
只能由受信任的人员访问,所有人员都具有完全管理员权限,那么可以授予他们集群的管理员权限。请注意,其他应用程序不应直接访问Dashboard
,因为它可能会导致权限提升。确保集群内流量仅限于命名空间,或者只是撤消对集群内其他应用程序的Dashboard
访问权限。
Kubernetes支持几种验证和授权用户的方法。可以在这里和这里阅读它们。授权由Kubernetes API Server
处理。Dashboard
仅充当代理并将所有身份验证信息传递给它。在禁止访问的情况下,相应的警告将显示在Dashboard
中。
create
和watch
在kube-system
命名空间中secret
的权限,以创建和监视kubernetes-dashboard-key-holder
secret
的更改。get
,update
和delete
在kube-system
命名空间中名为kubernetes-dashboard-key-holder
和kubernetes-dashboard-certs
的secret
的权限。kube-system
命名空间中的heapster
服务的代理权限,以允许从heapster
获取指标。kube-system
命名空间中的secret
创建权限以使其能够创建kubernetes-dashboard-key-holder
的secret
。get
,update
和delete
在kube-system
命名空间中名为kubernetes-dashboard-key-holder
和kubernetes-dashboard-certs
的secret
的权限。get
并update
在kube-system
命名空间中名为kubernetes-dashboard-settings
的configmap
的权限。kube-system
命名空间中的heapster
服务的代理权限,以允许从heapster
获取指标。从版本1.7
开始,Dashboard
支持基于以下内容的用户身份验证:
Authorization: Bearer <token>
:在每次向Dashboard
发出请求时传递请求头。从1.6
版开始支持。具有最高优先级。如果存在,则不会显示登录界面。Bearer Token
:在Dashboard
登录界面中使用。Dashboard
登录界面中使用。kubeconfig
:在Dashboard
登录界面中使用。登录界面在1.7
版中引入。如果使用的是最新推荐的安装,则默认情况下将启用登录功能。在任何其他情况下,如果更喜欢手动配置证书,则需要将--tls-cert-file
和--tls-cert-key
标志传递给Dashboard
。HTTPS端点将在Dashboard
容器的端口8443
上公开。可以通过提供--port
标志来更改它。
使用“跳过”选项将使Dashboard
使用Dashboard Service Account
的权限。默认情况下,跳过按钮自1.10.1
起禁用。使用--enable-skip-login dashboard
标志显示它。
在通过HTTP访问Dashboard
时,使用Authorization header
是使Dashboard
充当用户的唯一方法。请注意,由于普通HTTP流量容易受到MITM
攻击(中间人攻击),因此存在一些风险。
要使Dashboard
使用Authorization header
,只需将每个请求中的Authorization:Bearer <token>
传递给Dashboard
。这可以通过在Dashboard
前配置反向代理来实现。代理服务器将负责身份提供者的身份验证,并将请求头中生成的令牌传递给Dashboard
。请注意,需要正确配置Kubernetes API Server
才能接受这些令牌。
要快速测试它,请查看允许手动修改请求头的Requestly浏览器插件。
重要信息:如果通过
API Server
代理访问Dashboard
,则Authorization header
将不起作用。访问Dashboard
指南中描述的kubectl proxy
和API Server访问
Dashboard的方式都不起作用。这是因为一旦请求到达
API Server`,所有其他标头都将被删除。
建议首先熟悉Kubernetes身份验证
文档,以了解如何获取可用于登录的令牌。例如,每个Service Account
都有一个具有有效Bearer Token
的secret
,可用于登录Dashboard
。
默认情况下,在Kubernetes
中创建了许多Service Account
,它们都具有不同的访问权限。为了找到任何可用于登录的令牌,使用kubectl
:
# 检查kube-system命名空间中的现有secret
kubectl -n kube-system get secret
# 所有类型为'kubernetes.io/service-account-token'的secret都将允许登录
# 请注意,它们具有不同的权限
NAME TYPE DATA AGE
attachdetach-controller-token-xw1tw kubernetes.io/service-account-token 3 10d
bootstrap-signer-token-gz8qp kubernetes.io/service-account-token 3 10d
bootstrap-token-f46476 bootstrap.kubernetes.io/token 5 10d
certificate-controller-token-tp34m kubernetes.io/service-account-token 3 10d
daemon-set-controller-token-fqvwx kubernetes.io/service-account-token 3 10d
default-token-3d5t4 kubernetes.io/service-account-token 3 10d
deployment-controller-token-3gd7d kubernetes.io/service-account-token 3 10d
disruption-controller-token-gdsxq kubernetes.io/service-account-token 3 10d
endpoint-controller-token-vrxpg kubernetes.io/service-account-token 3 10d
flannel-token-xrldr kubernetes.io/service-account-token 3 10d
foo-secret kubernetes.io/tls 2 6d
generic-garbage-collector-token-hk04n kubernetes.io/service-account-token 3 10d
heapster-token-wgwgx kubernetes.io/service-account-token 3 10d
horizontal-pod-autoscaler-token-4865f kubernetes.io/service-account-token 3 10d
job-controller-token-q0wdp kubernetes.io/service-account-token 3 10d
kd-dashboard-token-token-bw08g kubernetes.io/service-account-token 3 7d
kube-dns-token-qc79f kubernetes.io/service-account-token 3 10d
kube-proxy-token-22kd5 kubernetes.io/service-account-token 3 10d
kubernetes-dashboard-head-token-pq4hk kubernetes.io/service-account-token 3 6d
kubernetes-dashboard-key-holder Opaque 2 5d
kubernetes-dashboard-token-7qmbc kubernetes.io/service-account-token 3 6d
namespace-controller-token-k6zfw kubernetes.io/service-account-token 3 10d
node-controller-token-0821f kubernetes.io/service-account-token 3 10d
persistent-volume-binder-token-vgt06 kubernetes.io/service-account-token 3 10d
pod-garbage-collector-token-6pz9t kubernetes.io/service-account-token 3 10d
replicaset-controller-token-kzpmc kubernetes.io/service-account-token 3 10d
replication-controller-token-4x5wh kubernetes.io/service-account-token 3 10d
resourcequota-controller-token-srbqv kubernetes.io/service-account-token 3 10d
service-account-controller-token-7qp8r kubernetes.io/service-account-token 3 10d
service-controller-token-p46zd kubernetes.io/service-account-token 3 10d
statefulset-controller-token-npt26 kubernetes.io/service-account-token 3 10d
token-cleaner-token-gdfq3 kubernetes.io/service-account-token 3 10d
ttl-controller-token-pt064 kubernetes.io/service-account-token 3 10d
# 从'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.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJyZXBsaWNhc2V0LWNvbnRyb2xsZXItdG9rZW4ta3pwbWMiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoicmVwbGljYXNldC1jb250cm9sbGVyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZDBkOTM3NDEtOTZjNS0xMWU3LTgyNDUtOTAxYjBlNTMyNTE2Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOnJlcGxpY2FzZXQtY29udHJvbGxlciJ9.wAzSLnDudLbAeeU9eRsPlVELLJ6EokDT8mLpEm868hh_Ot_7Pp68321a9ssddIczPqJeifG_nFaKovkdmjozysLvwYCfpKZEkQjl_VKrr9oBzrlGUk-1oaztoLMxxtlm1FuVd_2moWbrQYRv0sGdtmZLZl9vAfW2s3vpwSn_t8XRB-bcombjBakbjm3os4RsiutAS7vevdyJMkAIjKalwZnNJ0nMaY8qEpA85WjEF86zjj_QBpZFt8tJZ7IO3uUuTLgBdDJr8dPwJhkMZp_eE_zGkpsBlp34fdg-1_TQGDm0fokvBkRt8luSR9HnyYxk6UEk5MT60WeaEzvCe3J4SA
现在可以使用显示的令牌登录Dashboard
。要了解有关如何配置和使用Bearer Token
的更多信息,请阅读“简介”部分。
Basic认证默认是关闭的,原因是Kubernetes API Server
需要配置授权模式ABAC
和--basic-auth-file
标志。如果API Server
没有自动回退到匿名用户,那么无法检查提供的凭据是否有效。
为了在Dashboard
中启用Basic认证,必须提供authentication-mode=basic
标志。默认情况下,它设置为--authentication-mode=token
。
为方便起见,提供了这种登录方法。kubeconfig
文件仅支持-authentication-mode
标志指定的身份验证选项。如果它配置为使用任何其他方式,错误将显示在Dashboard
中。目前不支持外部身份提供程序或基于证书的身份验证。
重要提示:在继续操作之前,请确保知道自己在做什么。向
Dashboard
的Service Account
授予管理员权限可能存在安全风险。
可以通过创建以下ClusterRoleBinding
来授予Dashboard
的Service Accout
完全管理员权限。根据所选的安装方法复制YAML文件并另存为,如dashboard-admin.yaml
。使用kubectl create -f dashboard-admin.yaml
进行部署。之后,可以使用登录页面上的“跳过”选项来访问Dashboard
。
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard-head
labels:
k8s-app: kubernetes-dashboard-head
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard-head
namespace: kube-system