Kubernetes集群web界面搭建

在前几期的博客中我已经详细的搭建出了Kubernetes多节点集群,但是我们需要通过命令行(kubectl)去管理k8s集群。所以也可以通过web界面得方式去管理k8s集群。所以 本期就来详细的搭建一下k8s的webui界面。

部署UI界面

1.下载资源

UI界面的下载地址
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard

在这里插入图片描述
需要下载以上文件到任意master节点之中。

2.搭建ui界面
创建一个工作目录,并将官方文件拷贝只其中。

mkdir dashboard

在这里插入图片描述
接着我们在工作目录中需要创建这六个官方文件。在这之前我们查看一下命令。

kubectl create --help

#这里截取了一段官方的解释

[root@master_01 dashboard]# kubectl create --help
Create a resource from a file or from stdin. 

#需要用.json或者.yaml的文件才可以使用。
JSON and YAML formats are accepted.

#需要在命令后面-f指定文件
Examples:
  # Create a pod using the data in pod.json.
  kubectl create -f ./pod.json
  
  # Create a pod based on the JSON passed into stdin.
  cat pod.json | kubectl create -f -
  
  # Edit the data in docker-registry.yaml in JSON then create the resource using the edited data.
  kubectl create -f docker-registry.yaml --edit -o json

#一些可用的命令
Available Commands:
  clusterrole         Create a ClusterRole.
  clusterrolebinding  为一个指定的 ClusterRole 创建一个 ClusterRoleBinding
  configmap           从本地 file, directory 或者 literal value 创建一个 configmap
  deployment          创建一个指定名称的 deployment.
  job                 Create a job with the specified name.
  namespace           创建一个指定名称的 namespace
  poddisruptionbudget 创建一个指定名称的 pod disruption budget.
  priorityclass       Create a priorityclass with the specified name.
  quota               创建一个指定名称的 quota.
  role                Create a role with single rule.
  rolebinding         为一个指定的 Role 或者 ClusterRole创建一个 RoleBinding
  secret              使用指定的 subcommand 创建一个 secret
  service             使用指定的 subcommand 创建一个 service.
  serviceaccount      创建一个指定名称的 service account

下面我们开始创建:

#角色需要有权限访问api-server
kubectl create -f dashboard-rbac.yaml 
#安全功能
kubectl create -f dashboard-secret.yaml
#配置
kubectl create -f dashboard-configmap.yaml
#控制
kubectl create -f dashboard-controller.yaml
#service发布
kubectl create -f dashboard-service.yaml

3.查看创建的pod
这时UI界面已经创建好了,但是我们需要查看一下指定的命名空间。

#这里-n代表指定的命令空间,如不指定则默认使用default命令空间,可以清楚的看到创建在那个node节点之中
[root@master_01 dashboard]# kubectl get pods -n kube-system -o wide
NAME                                    READY   STATUS    RESTARTS   AGE     IP            NODE             NOMINATED NODE
kubernetes-dashboard-65f974f565-xshhv   1/1     Running   0          9m34s   172.17.59.3   192.168.80.134   <none>

然而我们并不能看到web界面对外提供的端口,所以我们需要另一个命令。

kubectl get pods service -n kube-system

[root@master_01 dashboard]# kubectl get service -n kube-system -o wide
NAME                   TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE   SELECTOR
kubernetes-dashboard   NodePort   10.0.0.223   <none>        443:30001/TCP   11m   k8s-app=kubernetes-dashboard

#当然我们也可以与get pods一起使用
[root@master_01 dashboard]# kubectl get pods,service -n kube-system -o wide
NAME                                        READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE
pod/kubernetes-dashboard-65f974f565-xshhv   1/1     Running   0          11m   172.17.59.3   192.168.80.134   <none>

NAME                           TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE   SELECTOR
service/kubernetes-dashboard   NodePort   10.0.0.223   <none>        443:30001/TCP   11m   k8s-app=kubernetes-dashboard

我们可以通过访问node节点IP地址:30001进行web的访问。然而如图:
在这里插入图片描述

4.创建tls证书
在当前目录下创建dashboard-cert的证书生成脚本。

vim dashboard-cert.sh

cat > dashboard-csr.json <<EOF
{
   "CN": "Dashboard",
   "hosts": [],
   "key": {
       "algo": "rsa",
       "size": 2048
   },
   "names": [
       {
           "C": "CN",
           "L": "BeiJing",
           "ST": "BeiJing"
       }
   ]
}
EOF
#定义变量,k8s集群证书所在路径
K8S_CA=$1

#创建证书
cfssl gencert -ca=$K8S_CA/ca.pem -ca-key=$K8S_CA/ca-key.pem -config=$K8S_CA/ca-config.json -profile=kubernetes dashboard-csr.json | cfssljson -bare dashboard
kubectl delete secret kubernetes-dashboard-certs -n kube-system
kubectl create secret generic kubernetes-dashboard-certs --from-file=./ -n kube-system
#运行此脚本生成秘钥
bash dashboard-cert.sh /root/k8s/k8s-cert/

#dashboard-controller.yaml需要重新编写一部分,48-49行进行插入
 vim dashboard-controller.yaml 

  45         args:
 46           # PLATFORM-SPECIFIC ARGS HERE
 47           - --auto-generate-certificates
 48           - --tls-key-file=dashboard-key.pem
 49           - --tls-cert-file=dashboard.pem

#重新部署
kubectl apply -f dashboard-controller.yaml

再次打开站点前需要再次查看pod所在node节点因为会变动。

kubectl get pods,svc -o wide -n kube-system

在这里插入图片描述
在这里插入图片描述
5.产生令牌

生成令牌
kubectl create -f k8s-admin.yaml

#查找生成的令牌
kubectl get secret -n kube-system
NAME                               TYPE                                  DATA   AGE
dashboard-admin-token-7h6ls        kubernetes.io/service-account-token   3      7m18s
default-token-hntt4                kubernetes.io/service-account-token   3      7d22h
kubernetes-dashboard-certs         Opaque                                11     25m
kubernetes-dashboard-key-holder    Opaque                                2      57m
kubernetes-dashboard-token-7zp86   kubernetes.io/service-account-token   3      57m

kubectl describe secret dashboard-admin-token-7h6ls -n kube-system

在这里插入图片描述
6.登录到UI界面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这样一个web的UI界面就搭建好了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐