前言
如何配置k8s上的网关服务traefik 我在前面已经说过了,详见这篇,但是呢之前配的ssl证书有点问题(用的cloudflare),为了解决这个问题,我把自己的域名的dns解析服务商换成了阿里云,下面就是自己的经验了
配置 cert-manager
cert-manager是什么?
配置cert-manager
由于我这里有很多子域名,我配了很多CNAME记录,这里呢我就选择了 acme的认证方式为 dns认证
使用阿里云dns
如果域名的管理权不在阿里云,记得从别的域名管理商那把dns解析地址给换成阿里云的地址
配置RAM 权限 获取 id 跟 secret
这个就是开启一下ram访问权限,配置一下用户
记得提取ram用户的 id跟secret 这个很重要!!!
配置cert-manager pod
这里可能会遇到镜像无法下载的问题,可以选择梯子 或者换一下镜像源
# 添加helm 库
helm repo add jetstack https://charts.jetstack.io --force-update
# 添加 cert-manager
helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.15.3 \
--set crds.enabled=true
# 添加阿里云的webhook
helm upgrade --install alidns-webhook alidns-webhook \
--repo https://wjiec.github.io/alidns-webhook \
--namespace cert-manager --create-namespace \
--set groupName=xxx.com # 这里的groupName 下面要用
配置secret issuer 以及 Certificate
apiVersion: v1
kind: Secret
metadata:
name: alidns-secret
namespace: cert-manager
stringData:
access-key-id: "你自己阿里云的id 上文提到的"
access-key-secret: "你自己阿里云的secret 上文提到的"
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: xxx-acme
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: xxx # 填写邮箱名称 随便填
privateKeySecretRef:
name: xxx-acme # 用于存储 ACME 帐户私钥的密钥名称(可自定义名称)
solvers:
- dns01:
webhook:
groupName: xxx.com # 要和安装的时候配置的groupName一致
solverName: alidns
config:
region: "cn-hangzhou" # 不用修改
accessKeyIdRef:
name: alidns-secret
key: access-key-id
accessKeySecretRef:
name: alidns-secret
key: access-key-secret
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: xxx-com
namespace: traefik
spec:
secretName: xxx-com-tls #生成证书文件的名称
dnsNames: # 需要签发证书的域名
- "xxx.com"
- "*.xxx.com"
issuerRef:
name: xxx-acme # 上一步生成的ClusterIssuer的名称
kind: ClusterIssuer
配置 traefik
详见这篇 这里面有traefik的配置文件,我们把生成的xxx-com-tls 配到配置文件的tls部分就行
使用https
因为traefik已经配好了tls,所以我们在我们配置的 ingressRoute 里面把 endpoint 换成 websecure就行
例子如下
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: wordpress-com
namespace: xxx
spec:
entryPoints:
- websecure
routes:
- match: Host(`xxx.com`)
kind: Rule
services:
- name: wordpress
port: 80
wordpress服务是我网站的首页,这里大家换成自己的服务就行 子域名也是一样的
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: harbor-web-xxx-com-tls
namespace: harbor
spec:
entryPoints:
- websecure
routes:
- match: Host(`harbor.xxx.com`)
kind: Rule
services:
- name: harbor
port: 80