https://www.cnblogs.com/panwenbin-logs/p/10052554.html html
一章、部署dashboardgit
做为Kubernetes的Web用户界面,用户能够经过Dashboard在Kubernetes集群中部署容器化的应用,对应用进行问题处理和管理,并对集群自己进行管理。经过Dashboard,用户能够查看集群中应用的运行状况,同时也可以基于Dashboard建立或修改部署、任务、服务等Kubernetes的资源。经过部署向导,用户可以对部署进行扩缩容,进行滚动更新、重启Pod和部署新应用。github
项目地址:https://github.com/kubernetes/dashboard,根据项目中的介绍,咱们本身在线安装便可,可是实际上咱们国内用户没法本身安装,须要下载后修改文件才能使用docker
下载yaml文件json
[root@k8s-master01 manifests]# mkdir dashboard^C [root@k8s-master01 manifests]# cd dashboard/ [root@k8s-master01 dashboard]# wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
修改yaml文件中镜像的地址及service的类型api
修改完成后,应用yaml文件bash
[root@k8s-master01 dashboard]# kubectl apply -f kubernetes-dashboard.yaml serviceaccount "kubernetes-dashboard" unchanged role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" unchanged rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" unchanged deployment.apps "kubernetes-dashboard" configured service "kubernetes-dashboard" configured [root@k8s-master01 dashboard]# kubectl get pod -n kube-system #dashborad存在于kube-system名称空间中 NAME READY STATUS RESTARTS AGE ...... kubernetes-dashboard-7b689d867f-f67hm 1/1 Running 0 27s [root@k8s-master01 dashboard]# kubectl get svc -n kube-system #查看service和端口是否开启 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ...... kubernetes-dashboard NodePort 10.101.22.15 <none> 443:32333/TCP 13m
经过masterIP:port进行访问,正常应该会出现下面的界面app
从界面中能够看到访问dashboard须要经过config或者token受权才能登录,可是dashboard自己不提供受权,由于dashborad是一个pod,实际上咱们是使用这个pod认证到k8s的集群中去的,咱们须要为dashborad的pod提供config或者token认证,因此这里的认证主体应该是serviceaccount负载均衡
若是出现如下界面ide
这是由于yaml文件中建立secret有问题,咱们须要手动建立一个证书来进行认证,下面咱们建立一个证书
[root@k8s-master01 dashboard]# cd /etc/kubernetes/pki/ [root@k8s-master01 pki]# (umask 077; openssl genrsa -out dashboard.key 2048) #建立一个证书 Generating RSA private key, 2048 bit long modulus ............................................................................................+++ .............+++ e is 65537 (0x10001) [root@k8s-master01 pki]# openssl req -new -key dashboard.key -out dashboard.csr -subj "/O=qiangungun/CN=kubernetes-dashboard" #创建证书的签署请求 [root@k8s-master01 pki]# openssl x509 -req -in dashboard.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dashboard.crt -days 3650 #使用集群的ca来签署证书 Signature ok subject=/O=qiangungun/CN=kubernetes-dashboard Getting CA Private Key [root@k8s-master01 pki]# kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.crt=./dashboard.crt --from-file=dashboard.key=./dashboard.key -n kube-system #咱们须要把咱们建立的证书建立为secret给k8s使用 secret "kubernetes-dashboard-certs" created
注释dashborad yaml文件中secret的配置
从新应用yaml文件
[root@k8s-master01 dashboard]# kubectl delete -f kubernetes-dashboard.yaml [root@k8s-master01 dashboard]# kubectl apply -f kubernetes-dashboard.yaml
再次访问应该就正常了
第二章、建立以token方式登陆dashborad的用户
1.建立具备集群管理权限的用户登陆dashborad
[root@k8s-master01 dashboard]# kubectl create serviceaccount dashboard-admin -n kube-system #建立用于登陆dashborad的serviceaccount帐号 serviceaccount "dashboard-admin" created [root@k8s-master01 dashboard]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin #建立一个clusterrolebingding,将名称为cluster-admin的clusterrole绑定到咱们刚刚从的serviceaccount上,名称空间和sa使用:做为间隔 clusterrolebinding.rbac.authorization.k8s.io "dashboard-cluster-admin" created [root@k8s-master01 dashboard]# kubectl get secret -n kube-system #建立完成后系统会自动建立一个secret,名称以serviceaccount名称开头 NAME TYPE DATA AGE ...... dashboard-admin-token-pbsj9 kubernetes.io/service-account-token 3 4m ..... [root@k8s-master01 dashboard]# kubectl describe secret dashboard-admin-token-pbsj9 -n kube-system #使用describe查看该secret的详细信息,主要是token一段 Name: dashboard-admin-token-pbsj9 Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name=dashboard-admin kubernetes.io/service-account.uid=b24fb2eb-f5e1-11e8-8969-5254001b07db Type: kubernetes.io/service-account-token Data ==== token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYa9hcmQtYWRtaW4tdG9rZW4tcGJzajkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYjI0ZmIyZWItZjVlMS0xMWU4LTg5NjktNTI1NDAwMWIwN2RiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.jDtIZFrcAPkr71pSStWm1AD4_gJA9A4JeYics3Nxs0hm2NQSCgL_pAIlVlSiHELmn3TLasOcvy8SljQnZQJcLKSkP-ubSBe8IkzXJkBr3SOhEr6eHb1ZDHXtC9bx58QH6PEOnO3hwoUaEtcIMuzC8ULbMp5f4TCvZ5mSKL_WPwaVJgZZDteUBPOsZHfcfIyatjXOWZBhiWbD3UZIN47ghpZl6BdXVeqLT5ua8Z8G0qtRD-DoDiQOaQ5Z9nKo_yluyb5cLJgpAtAl9i4Df7exHgVRnPETk1fbnxCDTGYlEgmLKFU6tRCEKl5Q66O9TICpdJIeT4sUBJxDSFVScPNFrA ca.crt: 1025 bytes namespace: 11 bytes
复制secret中的token,来访问dashborad
选择令牌,并粘贴刚刚复制的token,点击登陆
能够看到,能够管理集群中的全部资源
2、建立具备指定名称空间管理权限的用户登陆dashborad
[root@k8s-master01 dashboard]# kubectl create serviceaccount default-ns-admin -n default #再次建立一个serviceaccount,指定名称空间为default serviceaccount "default-ns-admin" created [root@k8s-master01 dashboard]# kubectl create rolebinding default-ns-admin --clusterrole=admin --serviceaccount=default:default-ns-admin #使用rolebinding绑定clusterrole用户admin到刚刚建立的serviceaccount上 rolebinding.rbac.authorization.k8s.io "default-ns-admin" created [root@k8s-master01 dashboard]# kubectl get secret NAME TYPE DATA AGE ...... default-ns-admin-token-26xgs kubernetes.io/service-account-token 3 2m ...... [root@k8s-master01 dashboard]# kubectl describe secret default-ns-admin-token-26xgs Name: default-ns-admin-token-26xgs Namespace: default Labels: <none> Annotations: kubernetes.io/service-account.name=default-ns-admin kubernetes.io/service-account.uid=b13f19e9-f5ec-11e8-8969-5254001b07db Type: kubernetes.io/service-account-token Data ==== ca.crt: 1025 bytes namespace: 7 bytes token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg
使用此token登陆dashborad
能够看到,出来default名称空间以外,没法看到其余名称空间了
第三章、建立以config方式登陆dashborad的用户
为了方面咱们直接使用刚刚建立的serviceaccount的token做为认证信息
[root@k8s-master01 dashboard]# cd /etc/kubernetes/pki/ [root@k8s-master01 pki]# kubectl config set-cluster kubernetes --certificate-authority=./ca.crt --server="https://172.16.150.212:6443" --embed-certs=true --kubeconfig=/root/def-ns-admin.conf #新建一个cluster,名称为kubernetes,使用当前集群的ca进行认证,并指定kubeconfig文件位置 Cluster "kubernetes" set. [root@k8s-master01 pki]# kubectl config view --kubeconfig=/root/def-ns-admin.conf #查看建立信息 apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://172.16.150.212:6443 name: kubernetes contexts: [] current-context: "" kind: Config preferences: {} users: [] [root@k8s-master01 pki]# cd [root@k8s-master01 ~]# kubectl get secret [root@k8s-master01 ~]# DEF_NS_ADMIN_TOKEN=$(kubectl get secret default-ns-admin-token-26xgs -o jsonpath={.data.token}|base64 -d) #k8s生成的token为base64加密,全部须要使用base64进行解密 [root@k8s-master01 ~]# kubectl config set-credentials def-ns-admin --token=$DEF_NS_ADMIN_TOKEN --kubeconfig=/root/def-ns-admin.conf #建立一个serviceaccount的用户 User "def-ns-admin" set. [root@k8s-master01 manifests]# kubectl config view --kubeconfig=/root/def-ns-admin.conf apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://172.16.150.212:6443 name: kubernetes contexts: - context: cluster: kubernetes user: def-ns-admin name: def-ns-admin@kubernetes current-context: "" kind: Config preferences: {} users: - name: def-ns-admin user: token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg [root@k8s-master01 manifests]# kubectl config use-context def-ns-admin@kubernetes --kubeconfig=/root/def-ns-admin.conf #设置当前serviceaccount的上下文 Switched to context "def-ns-admin@kubernetes". [root@k8s-master01 manifests]# kubectl config view --kubeconfig=/root/def-ns-admin.conf apiVersion: v1 clusters: - cluster: certificate-authority-data: REDACTED server: https://172.16.150.212:6443 name: kubernetes contexts: - context: cluster: kubernetes user: def-ns-admin name: def-ns-admin@kubernetes current-context: def-ns-admin@kubernetes kind: Config preferences: {} users: - name: def-ns-admin user: token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg
导出/root/def-ns-admin.conf到客户端上,并选择kubeconfig方式登陆,点击选择文件便可
没有问题,登陆成功
第四章、Dashboard使用
1 、Dashboard提供的功能
在默认状况下,Dashboard显示默认(default)命名空间下的对象,也能够经过命名空间选择器选择其余的命名空间。在Dashboard用户界面中可以显示集群大部分的对象类型。
1)集群管理
集群管理视图用于对节点、命名空间、持久化存储卷、角色和存储类进行管理。 节点视图显示CPU和内存的使用状况,以及此节点的建立时间和运行状态。 命名空间视图会显示集群中存在哪些命名空间,以及这些命名空间的运行状态。角色视图以列表形式展现集群中存在哪些角色,这些角色的类型和所在的命名空间。 持久化存储卷以列表的方式进行展现,能够看到每个持久化存储卷的存储总量、访问模式、使用状态等信息;管理员也可以删除和编辑持久化存储卷的YAML文件。
2) 工做负载
工做负载视图显示部署、副本集、有状态副本集等全部的工做负载类型。在此视图中,各类工做负载会按照各自的类型进行组织。 工做负载的详细信息视图可以显示应用的详细信息和状态信息,以及对象之间的关系。
3) 服务发现和负载均衡
服务发现视图可以将集群内容的服务暴露给集群外的应用,集群内外的应用能够经过暴露的服务调用应用,外部的应用使用外部的端点,内部的应用使用内部端点。
4) 存储
存储视图显示被应用用来存储数据的持久化存储卷申明资源。
5) 配置
配置视图显示集群中应用运行时所使用配置信息,Kubernetes提供了配置字典(ConfigMaps)和秘密字典(Secrets),经过配置视图,可以编辑和管理配置对象,以及查看隐藏的敏感信息。
6) 日志视图
Pod列表和详细信息页面提供了查看日志视图的连接,经过日志视图不但可以查看Pod的日志信息,也可以查看Pod容器的日志信息。经过Dashboard可以根据向导建立和部署一个容器化的应用,固然也能够经过手工的方式输入指定应用信息,或者经过上传YAML和JSON文件来建立和不受应用。
2 、部署应用
1)手动建立应用
经过向导建立和部署容器化应用时,须要提供以下的一些信息:
应用名称(App name 必需): 须要部署的应用的名称。带有此值的标签将会被添加至部署和服务中。在当前的Kubernetes命名空间中,应用名称必须是惟一的。同时,应用名称必须以小写字母开头,以小写字母和数字结尾,能够包含字母、数字和“-”。名称最长为24个字母。
容器组个数(Number of pods 必需): 但愿部署的容器组数量。值必须为整数。
描述(Description): 对于应用的描述,将被添加至部署的注释中,并在应用详细信息中显示。
标签(Labels): 应用的默认标签为应用的名称和版本。能够指定其它的标签,这些标签将会被应用至部署、服务、容器组等资源中。
命名空间(Namespace):在同一个物理集群中,Kubernetes支持多个虚拟集群。这些虚拟集群被称为命名空间,经过命名空间能够将资源进行逻辑上的划分。经过下列菜单能够选择已有的命名空间,固然也能够建立新的命名空间。命名空间的名称最大的字符数为63,名词可使用字母、数字“-”,不能包含大写字母,同时也不能所有使用数字。
镜像拉取保密字典(Image Pull Secret): 若是Docker容器镜像是私有的,则有可能须要保密证书。Dashboard经过下拉菜单提供了全部的可用的保密凭证,也容许建立新的保密字典。保密字典名称必须遵循DNS域名语法,例如:new.image-pull.secret。保密字典的内容必须使用基于base64进行加密的,并在.dockercfg文件中进行指定。保密字典名称最长不能超过253个字符。
环境变量(Environment variables): Kubernetes经过环境变量暴露服务, 能够建立环境变量或者使用环境变量的值将参数传递给命令。环境变量可以被应用用来发现服务,环境变量的值能够经过¥(VAR_NAME)语法被其它变量引用。
2)上传YAML或JSON文件建立应用
经过编译工具编写容器化应用的YAML和JSON文件,在Dashboard用户界面中经过上传文件建立和部署应用。
部署步骤简单总结:
1、部署:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
2、将Service改成NodePort
kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
3、认证:
认证时的帐号必须为ServiceAccount:被dashboard pod拿来由kubernetes进行认证;
token:
(1)建立ServiceAccount,根据其管理目标,使用rolebinding或clusterrolebinding绑定至合理role或clusterrole;
(2)获取到此ServiceAccount的secret,查看secret的详细信息,其中就有token;
kubeconfig: 把ServiceAccount的token封装为kubeconfig文件
(1)建立ServiceAccount,根据其管理目标,使用rolebinding或clusterrolebinding绑定至合理role或clusterrole;
(2)kubectl get secret | awk '/^ServiceAccount/{print $1}'
KUBE_TOKEN=$(kubectl get secret SERVCIEACCOUNT_SERRET_NAME -o jsonpath={.data.token} |base64 -d)
(3)生成kubeconfig文件
kubectl config set-cluster --kubeconfig=/PATH/TO/SOMEFILE
kubectl config set-credentials NAME --token=$KUBE_TOKEN --kubeconfig=/PATH/TO/SOMEFILE kubectl config set-context
kubectl config use-context