书接上回,首先对上一篇文章做一个补充:主、从节点还需要打开TCP:10250端口。
上一篇,我们搭建了一个两个节点的K3S集群,并且部署了一个dashboard,但是有一个不优雅的地方是访问dashboard需要加端口,这篇文章就来解决这个问题,最终效果是,通过域名访问dashboard。
准备一个域名,解析到主节点的IP上,这里假设域名是 k3s.example.com。
K3S默认安装,自带一个Traefik Ingress,但是,我发现网上的很多资料,都是用的Nginx Ingress,所以作为新手的我们,还是本着别人用什么我们也用什么的原则,装一个Nginx Ingress,这样如果碰到问题,网上参考资料也多。
在主节点运行命令:vi /etc/systemd/system/k3s.service
修改配置文件,禁用系统自带的Traefik Ingress
把ExecStart那一行内容改成如图所示,主要是加了 --disable traefik
参数。
运行命令重启服务:
systemctl daemon-reload
systemctl restart k3s
把这个文件https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml 下载到本地,用文本编辑器打开,把里面的内容替换一下,因为国内访问不了。
原始值 | 替换值 |
---|---|
k8s.gcr.io/ingress-nginx/kube-webhook-certgen | liangjw/kube-webhook-certgen |
k8s.gcr.io/ingress-nginx/controller | liangjw/ingress-nginx-controller |
上传deploy.yaml
文件,并执行命令:kubectl apply -f deploy.yaml
稍等一会儿,就装好了。
把这个文件https://github.com/cert-manager/cert-manager/releases/download/v1.7.2/cert-manager.yaml 下载到本地,并上传到服务器,执行命令kubectl apply -f cert-manager.yaml
创建文件issur.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-issuer
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: user@example.com
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-http01
# Enable the HTTP-01 challenge provider
solvers:
# An empty 'selector' means that this solver matches all domains
- selector: {}
http01:
ingress:
class: nginx
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: k3s-example-com
namespace: kubernetes-dashboard
spec:
secretName: k3s-example-com-tls
issuerRef:
kind: ClusterIssuer
name: letsencrypt-issuer
dnsNames:
- k3s.example.com
需要说明的是:
可以使用命令kubectl get secret k3s-example-com-tls -n kubernetes-dashboard -o yaml
看下有没有成功。
创建一个文件dashboard-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/backend-protocol: HTTPS
name: dashboard-ingress
namespace: kubernetes-dashboard
spec:
rules:
- host: k3s.example.com
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: kubernetes-dashboard
port:
number: 8443
tls:
- hosts:
- k3s.example.com
secretName: k3s-example-com-tls
执行命令kubectl apply -f dashboard-ingress.yaml
不出意外,应该可以通过域名访问dashboard了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。