Skip to content
赞赏-微信扫码

主要内容:全自动 https、识别客户端真实ip、80 强制跳转 443

kubernetes 知识点:体会 注解 的作用。配置中心里有个 密文 类型的东西。traefik 的全局自定义配置。

先要有个 证书的颁发者

安装 cert-manager

原文链接: https://cert-manager.io/docs/installation/kubectl/

原文关键步骤:

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.2/cert-manager.yaml

配置 ClusterIssuer

申请证书的过程中,有一个步骤要校验域名的所有权,有两种方式,

一种是基于 dns 来校验域名所有权。不过 阿里云 的 dns 未被 letsencrypt 支持。

我们用的方式,在申请证书的过程中,需要 80 端口能被 letsencrypt 的服务器访问,通过 80 端口返回 letsencrypt 预期的数据,来校验域名的所有权。所以在 内网穿透 的配置中,我们把 80 端口也映射了。

yaml
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  annotations: {}
  name: letsencrypt-prod
spec:
  acme:
    email: xxx@qq.com
    privateKeySecretRef:
      name: prod-issuer-account-key
    server: 'https://acme-v02.api.letsencrypt.org/directory'
    solvers:
      - http01:
          ingress:
            class: traefik
        selector: {}

上面的配置中,给颁发者取了名字,叫 letsencrypt-prod, 后面会用到。

然后用上这个 证书的颁发者

配置 ingress 注解

cert-manager.io/cluster-issuer    letsencrypt-prod

配置 ingress 使用证书文件

新建个 TLS Secret(配置中心/密文),只用填名称,内容空白的就行,issuer 会自动往里面填内容。

保存 应用路由 的配置后,应该就能在 Kuboard 界面上看到事件通知,看到 cert-manager 相关的服务开始申请证书了。

踩坑小贴士

  1. 同一个 ingress(应用路由)下,路由规则列表 里有 多个同域子域名,可以公用一个 TLS Secret 对象。但是不要跨 ingress 对象去公用 TLS Secret。
  2. 同一个 ingress(应用路由)下,路由规则列表 里有 多个规则。保存后最好看一眼最终的 yaml 内容(尤其是有删除排在中间的路由规则的时候)。Kuboard 的界面可能有bug,表单界面上看到的路由规则不准,要以 yaml 里的为准。

traefik 的全局自定义配置

配置 80端口 跳转 443 端口

顺带,信任 tcp 代理的转发协议(配合 frp 内网穿透 的 proxyProtocol 配置,让工作负载能获取到客户端真实ip)

yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: traefik
  namespace: kube-system
spec:
  valuesContent: |-
    ports:
      web:
        redirectTo:
          port: websecure
        proxyProtocol:
          insecure: true
      websecure:
        proxyProtocol:
          insecure: true

traefik 是 k3s 默认自带的组件,使用 helm 安装的,所以这里是在使用 helm 的配置能力去覆盖可自定义的 valuesContent。我们需要两篇官方文档,

一是 k3s 文档中介绍的,如何 自定义 traefik 安装参数: https://docs.k3s.io/zh/helm#customizing-packaged-components-with-helmchartconfig

二是 traefik 的 helm 仓库资料,看有哪些参数可以自定义:https://github.com/traefik/traefik-helm-chart/blob/master/traefik/values.yaml