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

查看一下
image

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

image

能看到目前只可内部访问

接下来我们用以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这部分
image

在 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

image

这时候就可以通过浏览器来访问dashboard了

image

这里如果是Firefox的话,可以通过配置例外来正常访问。
我们用的是Chrome,这里有一个骚操作
鼠标点一下这个页面的空白处,然后直接输入 thisisunsafe
这个过程什么也看不到,就是盲敲键盘就可以,像极了小时候玩游戏时输入秘籍的场景
然后就可以访问了

image

接下来我们来到了登录环节
首先回到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}')

image

复制到刚才的登录页面中,登录

image

开启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了。
image

部署一个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

image

上传好之后,我们在Deployments中可以看到部署好的Nginx,同时在Services里面可以找到Nginx的service
image

接下来还是点击加号,继续输入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页面。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注