网站首页 文章专栏 02dashboard ingress部署.md
之前使用NodePort方式部署了k8s dashboard,但美中不足的是只能通过node的ip访问该服务。而k8s的pod是随机调度的,不知道什么时间该pod就不在原先的node上了。所以有必要将dashboard页面通过ingress的方式暴露出来。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dashboard-ingress
namespace: kubernetes-dashboard
annotations:
nginx.ingress.kubernetes.io/secure-backends: "true"
spec:
rules:
- host: k8s.stackoverflow.club #生产中该域名应当可以被公网解析
http:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 443
这里面能修改的内容不多,只有metadata.name
和spec.rules[].host
是自定义的,其他东西都动不得。
特别要强调以下几点:
metadata.annotations.nginx.ingress.kubernetes.io/secure-backends: "true"
表明后端服务是https访问的,这点非常重要。我在上面折腾了很久,配置错误实际上是用http方式访问https,返回503错误。metadata.namespace: kubernetes-dashboard
用来设置ingress的命名空间,要和dashboard的一致,否则ingress无法访问dashboard数据。首先要生成证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=k8s.stackoverflow.club"
修改命令中的域名部分,自己签一个证书(貌似这种方式省去生成ca?)
然后证书放到k8s中
kubectl create secret tls k8s-dashboard-secret --key tls.key --cert tls.crt
kubectl create secret
是重点,用来生成密码之类的东西。
配置ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dashboard-ingress
namespace: kubernetes-dashboard
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/secure-backends: "true"
spec:
tls:
- secretName: k8s-dashboard-secret
rules:
- host: k8s.stackoverflow.club #生产中该域名应当可以被公网解析
http:
paths:
- path:
backend:
serviceName: kubernetes-dashboard
servicePort: 443
注意以下几点:
metadata.annotations
用来声明nginx的重写等行为spec.tls
用来添加证书,secretName
与kubectl create secret
相同