本篇文章不提供ingress-nginx的安装步骤,专门写一篇安装ingress-nginx的文章
在搭建好dashboard后我们通常是使用NodePort的方式去访问,本篇将使用ingress-nginx将dashboard暴露出来。
如果之前是直接安装的dashboard且使用NodePort,建议先删除,重新安装,因为证书不对。
kubectl delete -f dashboard.yaml
证书
首先生成https服务需要的证书(自签证书)
其中dashboard.pooh.online为本次使用的域名需要和ingress中保持一致
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout dashboard.key -out dashboard.crt -subj "/CN=dashboard.pooh.online/O=dashboard.pooh.online"
也可以使用certbot去搞个证书,但是这个你得有个A解析,我这个是内网玩的,就自签就行了
root@k8s-master01:~/tls# openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout dashboard.key -out dashboard.crt -subj "/CN=dashboard.pooh.online/O=dashboard.pooh.online" Generating a RSA private key .....................+++++ ........................................................................+++++ writing new private key to 'dashboard.key' ----- root@k8s-master01:~/tls# root@k8s-master01:~/tls# ls dashboard.crt dashboard.key
创建一个命名空间
kubectl create ns kubernetes-dashboard
创建secret
创建secret,在ingress不能直接使用证书需要转换为secret才能使用,要使用上面的命名空间
kubectl create secret tls kubernetes-dashboard-certs --key dashboard.key --cert dashboard.crt -n kubernetes-dashboard
修改配置dashboard
vim dashboard.yaml
修改deployment部分的容器参数, 添加使用自定义证书文件的相关参数
args:
- --tls-cert-file=dashboard.crt # 证书
- --tls-key-file=dashboard.key # 私钥
- --auto-generate-certificates # 这行好像不能注释
--token-ttl=7200 # 设置token超时时间
- --namespace=kubernetes-dashboard
注释掉创建kubernetes-dashboard-certs Secret certs部分的内容
#--- # #apiVersion: v1 #kind: Secret #metadata: # labels: # k8s-app: kubernetes-dashboard # name: kubernetes-dashboard-certs # namespace: kubernetes-dashboard #type: Opaque
重新安装dashboard.yaml
kubectl apply -f dashboard.yaml
创建ingress文件
创建ingress文件, 指定对应的hosts、tls及路由规则配置
vim ingress-dashboard.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: kubernetes-dashboard
name: ingress-dashboard
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.org/ssl-services: "kubernetes-dashboard"
spec:
tls:
- hosts:
- "dashboard.pooh.online"
secretName: kubernetes-dashboard-certs
rules:
- host: dashboard.pooh.online
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubernetes-dashboard
port:
number: 443
kubectl apply -f ingress-dashboard.yaml
创建一个超级管理员账号
vim user.yaml
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
把登录的密钥给找出来
root@k8s-master01:~# kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
最后得到那一坨,就是登录dashboard的token
绑定hosts
还差一步,绑定一个hosts,我当时做ingress的时候,是安装到node1上面,所以,绑定hosts也是
192.168.3.204 dashboard.pooh.online
打开浏览器
https://dashboard.pooh.online,用那个token就可以登录了



