k8s1.23 使用cert-manager自动签发阿里云DNS域名证书
环境信息: k8s:1.23.1 helm:3.8.1 已备案域名:chandz.com
一、基础环境配置
0、镜像列表
quay.io/jetstack/cert-manager-cainjector:v1.7.2 quay.io/jetstack/cert-manager-controller:v1.7.2 quay.io/jetstack/cert-manager-webhook:v1.7.2 pragkent/alidns-webhook:0.1.1
1、安装cert-manager
yaml安装: kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.2/cert-manager.yaml helm 安装 helm repo add jetstack https://charts.jetstack.io helm search repo cert-manager kubectl create namespace cert-manager helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.7.2 --set installCRDs=true
2、获取阿里云ak/sk(权限为AliyunDNSFullAccess,也可以使用自定义权限,具体可参考阿里云官方文档) 3、创建一个有阿里dns修改权限ak/sk的secert
kubectl apply -f alidns-secret.yaml
#alidns-secret.yaml apiVersion: v1 kind: Secret metadata: name: alidns-secret namespace: cert-manager stringData: access-key: YOUR_ACCESS_KEY #阿里云dns权限ak secret-key: YOUR_SECRET_KEY #阿里云dns权限sk
4、安装alidns的webhook
wget https://raw.githubusercontent.com/pragkent/alidns-webhook/master/deploy/bundle.yaml 修改文件中的acme.yourcompany.com为自己的域名 sed -i s/acme.yourcompany.com/acme.chandz.com/g bundle.yaml
5、创建clusterIssuer
kubectl apply -f clusterissuer.yaml kubectl get clusterissuers.cert-manager.io
#clusterissuer.yaml apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt spec: acme: # Change to your letsencrypt email email: duanshuaixing@gmail.com #申请者邮箱地址 server: https://acme-v02.api.letsencrypt.org/directory privateKeySecretRef: name: letsencrypt-account-key solvers: - dns01: webhook: groupName: acme.chandz.com #须和bundle.yaml文件中定义的groupname 一致 solverName: alidns config: region: "" accessKeySecretRef: name: alidns-secret key: access-key secretKeySecretRef: name: alidns-secret key: secret-key
6、创建certificate
#创建certificate kubectl apply -f certificate.yaml #查看 certificate kubectl get certificate #刚创建certificate ready状态为false,会自动在dns解析创建txt记录去签发证书ready字段会变为true #查看证书 kubectl get secrets chandz-com-tls -o json |jq --raw-output .data["tls.crt"]|base64 -d
#certificate.yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: chandz-com-tls spec: secretName: chandz-com-tls dnsNames: #dnsNames 指示该证书的可以用于哪些域名 - chandz.com - "*.chandz.com" issuerRef: name: letsencrypt kind: ClusterIssuer
二、使用证书
kubectl apply -f nginx.yaml
#nginx.yaml --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - image: nginx:latest name: nginx imagePullPolicy: IfNotPresent --- apiVersion: v1 kind: Service metadata: name: nginx-https namespace: default spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: tls-ingress spec: ingressClassName: nginx rules: - host: "tls-test.chandz.com" http: paths: - pathType: ImplementationSpecific path: backend: service: name: nginx-https port: number: 80 tls: - hosts: - tls-test.chandz.com secretName: chandz-com-tls
三、代码地址
https://github.com/duanshuaixing/tools/tree/master/cert-mamager
上一篇:
IDEA上Java项目控制台中文乱码