前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K3S 从放弃到入门(二)使用域名访问dashboard

K3S 从放弃到入门(二)使用域名访问dashboard

原创
作者头像
一介程序员
修改2022-03-30 10:43:55
2.8K0
修改2022-03-30 10:43:55
举报
文章被收录于专栏:写两行代码放松下

书接上回,首先对上一篇文章做一个补充:主、从节点还需要打开TCP:10250端口。

上一篇,我们搭建了一个两个节点的K3S集群,并且部署了一个dashboard,但是有一个不优雅的地方是访问dashboard需要加端口,这篇文章就来解决这个问题,最终效果是,通过域名访问dashboard。

第零步

准备一个域名,解析到主节点的IP上,这里假设域名是 k3s.example.com。

安装 Nginx Ingress

K3S默认安装,自带一个Traefik Ingress,但是,我发现网上的很多资料,都是用的Nginx Ingress,所以作为新手的我们,还是本着别人用什么我们也用什么的原则,装一个Nginx Ingress,这样如果碰到问题,网上参考资料也多。

在主节点运行命令:vi /etc/systemd/system/k3s.service修改配置文件,禁用系统自带的Traefik Ingress

1.png
1.png

把ExecStart那一行内容改成如图所示,主要是加了 --disable traefik参数。

运行命令重启服务:

代码语言:shell
复制
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稍等一会儿,就装好了。

安装cert-manager

把这个文件https://github.com/cert-manager/cert-manager/releases/download/v1.7.2/cert-manager.yaml 下载到本地,并上传到服务器,执行命令kubectl apply -f cert-manager.yaml

创建文件issur.yaml

代码语言: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

需要说明的是:

  1. 里面的email、域名需要改成自己的,并且域名一定要是解析状态,非解析状态的域名无法成功申请证书;
  2. Issuer的类型分两种:ClusterIssuer和Issuer,ClusterIssuer可以跨namespace提供服务,Issuer类型只能在相同的namespace提供服务。这里证书需要放在kubernetes-dashboard所在的namespace中,所以我把他设置成ClusterIssuer,这样以后我在别的namespace中也能用他。

可以使用命令kubectl get secret k3s-example-com-tls -n kubernetes-dashboard -o yaml看下有没有成功。

配置Ingress

创建一个文件dashboard-ingress.yaml

代码语言: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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第零步
  • 安装 Nginx Ingress
  • 安装cert-manager
  • 配置Ingress
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档