4台RaspberryPi4B搭建K8s(K3s)容器集群(三)开启Dashboard
部署Kubernetes Dashboard (WEB UI)
官网页面在这里
Web UI (Dashboard)
我们可以在Master这台机器上直接执行官方的recommended.yaml
命令行如下
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.2.0/aio/deploy/recommended.yaml
执行完之后
kubectl get pods -A
查看一下
Kubernetes Dashboard已经装好了
在Master上执行命令
kubectl proxy
然后就可以在这台机器上访问了,地址如下
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
目前默认状态下,kubernetes-dashboard并没有对外暴露
通过命令可查看kubernetes-dashboard相关的service
kubectl -n kubernetes-dashboard get svc
能看到目前只可内部访问
接下来我们用以Nodeport的形式将dashboard服务暴露出去
最简单的办法可以使用kubectl命令直接修改刚才已经部署好的kubernetes-dashboard服务
kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30443}]}}'
还有一种方式是把上面的recommended.yaml先wget下来,然后修改
找到文件中kind: Service这部分
在 spec: 下加上 type: NodePort ,并在 ports: 这里面加上 nodePort: 30443
修改后的这部分内容如下
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30443
selector:
k8s-app: kubernetes-dashboard
---
修改好文件之后再更新一下就可以了
kubectl apply -f recommended.yaml
我们再来查看kubernetes-dashboard的service
kubectl -n kubernetes-dashboard get svc
这时候就可以通过浏览器来访问dashboard了
这里如果是Firefox的话,可以通过配置例外来正常访问。
我们用的是Chrome,这里有一个骚操作
鼠标点一下这个页面的空白处,然后直接输入 thisisunsafe
这个过程什么也看不到,就是盲敲键盘就可以,像极了小时候玩游戏时输入秘籍的场景
然后就可以访问了
接下来我们来到了登录环节
首先回到Master机器的终端
cd /var/lib/rancher/k3s/server/manifests/
来到manifests目录创建dashboard-adminuser.yaml文件
cat > dashboard-adminuser.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
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: kubernetes-dashboard
EOF
然后就可以查找到token了
kubectl -n kubernetes-dashboard describe secret (kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print1}')
复制到刚才的登录页面中,登录
开启Traefik UI
traefik UI 在通过官方脚本部署K3S的时候就已经安装好了。
但是默认状态下并未对外暴露。
这里需要注意的是当前安装的K3S版本是v1.21.1-k3s1,其中对应安装好的traefik版本是2.4
因此原有的1.7和1.8版本的修改yaml文件开启UI的方式(dashboard:enable)就不适用了,我们需要创建dashboard.yaml文件为traefik配置。
traefik在Github上关于开启Traefik Dashboard相关页面在这里
traefik / traefik-helm-chart
参考 Exposing the Traefik dashboard 这一段
我们回到manifests目录
cd /var/lib/rancher/k3s/server/manifests/
创建dashboard-adminuser.yaml文件
内容如下
# dashboard.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: dashboard
spec:
entryPoints:
- web
routes:
- match: Host(`traefik.k3s`) && (PathPrefix(`/dashboard`) || PathPrefix(`/api`))
kind: Rule
services:
- name: api@internal
kind: TraefikService
这里我们设置了一个traefik的访问域名是 traefik.k3s
kubectl apply -f dashboard.yaml
更新一下
(以上内容也可以直接在kubernetes dashboard中输入YAML内容那里来执行)
配置一下本地电脑上的host
192.168.31.81 traefik.k3s
现在我们可以通过 http://traefik.k3s/dashboard/ 来访问Traefik的WEB UI了。
部署一个Nginx
部署一个Nginx
接下来我们在kubernetes dashboard部署一个Nginx服务并通过Ingress为它配置一个域名并暴露在集群服务器的网络下
首先进入到kubernetes dashboard 页面,点击右上角的加号
输入YAML内容并上传,启动一个Nginx服务。
YAML内容如下
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.18-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
上传好之后,我们在Deployments中可以看到部署好的Nginx,同时在Services里面可以找到Nginx的service
接下来还是点击加号,继续输入YAML来配置一个Ingress,host配置traefik.dracula.io域名
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: traefik-nginx
namespace: default
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: traefik.dracula.io
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 80
再来配置一下本地电脑上的host
192.168.31.81 traefik.dracula.io
现在通过浏览器访问 traefik.dracula.io 可以看到Nginx页面。