cert-manager

### cert-manager
helm repo add jetstack https://charts.jetstack.io
helm repo add cert-manager-alidns-webhook https://devmachine-fr.github.io/cert-manager-alidns-webhook
helm pull jetstack/cert-manager --version v1.12.7
##helm pull cert-manager-alidns-webhook/alidns-webhook --version 0.7.0
ingressShim:
  defaultIssuerName: "zerossl-production"
  defaultIssuerKind: "ClusterIssuer"
installCRDs: true
extraArgs:
  - --enable-certificate-owner-ref=true
  - --dns01-recursive-nameservers-only
  - --dns01-recursive-nameservers=8.8.8.8:53,114.114.114.114:53

helm install cert-manager -f values.yaml ./ -n cert-manager

wget https://raw.githubusercontent.com/pragkent/alidns-webhook/master/deploy/bundle.yaml
:%s/yourcompany/yourdomain/g

kubectl  apply -f bundle.yaml

###cd alidns-webhook-0.7.0
###groupName: yourdomain.com
###helm  install alidns-webhook -n cert-manager ./
###d.vimll.com:9888/root/plulic/cert-manager-alidns-webhook/cert-manager-alidns-webhook:0.2.0
##
###kubectl create secret generic alidns-secrets --from-literal="access-token=LTAI5tDQhbWYw1dTcc2RJUYJ" --from-literal="secret-key=jYXGqsKjPAfvJifod5S1Y9T3SSCq1X" -n istio-system

https://github.com/pragkent/alidns-webhook
https://cert-manager.io/docs/configuration/
https://cert-manager.io/docs/usage/ingress/

echo -n  xxxxxxxxxxxxxxxxxxxxxx |base64
echo -n xxxxxxxxxxxxxxxxxxxxxxxxx |base64

#### cat issuer.yaml
###apiVersion: cert-manager.io/v1
###kind: Issuer
###metadata:
###  name: letsencrypt
###  namespace: istio-system
###spec:
###  acme:
###    email: xxxxxxx@xxxxxxxxxxxx.com
###    privateKeySecretRef:
###      name: letsencrypt
###    server: https://acme-staging-v02.api.letsencrypt.org/directory
###    solvers:
###    - dns01:
###        webhook:
###          config:
###            accessTokenSecretRef:
###              key: access-token
###              name: alidns-secrets
###            regionId: cn-hangzhou
###            secretKeySecretRef:
###              key: secret-key
###              name: alidns-secrets
###          groupName: yourdomain.com
###          solverName: alidns-solver
###      selector:
###        dnsNames:
###        - yourdomain.com
###        - '*.yourdomain.com'
###        - '*.s3.yourdomain.com'
###
###kubectl  apply -f issuer.yaml -n istio-system
###
#### cat yourdomain-cert.yaml
###apiVersion: cert-manager.io/v1
###kind: Certificate
###metadata:
###  name: yourdomain-tls
###spec:
###  secretName: yourdomain-com-tls
###  commonName: yourdomain.com
###  dnsNames:
###  - yourdomain.com
###  - "*.yourdomain.com"
###  - "*.s3.yourdomain.com"
###  issuerRef:
###    name: letsencrypt
###    kind: Issuer
###
###kubectl  apply -f yourdomain-cert.yaml -n istio-system

# cat alidns-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: alidns-secret
  namespace: cert-manager
data:
  access-key: xxxxxxxxxxxxxxxxxxxxx
  secret-key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

kubectl  apply -f alidns-secret.yaml -n cert-manager

# cat clusterissuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    email: xxxxxxxxxxxx@xxxxxxxxxx.com
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-staging-account-key
    solvers:
    - dns01:
        webhook:
          groupName: acme.yourdomain.com
          solverName: alidns
          config:
            region: ""
            accessKeySecretRef:
              name: alidns-secret
              key: access-key
            secretKeySecretRef:
              name: alidns-secret
              key: secret-key
      selector:
        dnsNames:
        - '*.yourdomain.com'
        - '*.s3.yourdomain.com'

# cat yourdomain-cert.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: yourdomain-tls
spec:
  secretName: yourdomain-com-tls
  #commonName: yourdomain.com
  dnsNames:
  #- yourdomain.com
  - "*.yourdomain.com"
  - "*.s3.yourdomain.com"
  issuerRef:
    name: letsencrypt-staging
    kind: ClusterIssuer
    #name: letsencrypt
    #kind: Issuer

kubectl  apply -f clusterissuer.yaml -n cert-manager
kubectl  apply -f yourdomain-cert.yaml -n istio-system

#查看证书
kubectl  get  secrets  -n istio-system yourdomain.com-tls -o json |jq --raw-output '.data["tls.crt"]'|base64 -d 
kubectl  get  secrets -n istio-system yourdomain.com-tls -o=jsonpath='{.data.tls\.crt}'|base64 --decode > /etc/nginx/ssl/fullchain.cer
kubectl  get  secrets -n istio-system yourdomain.com-tls -o=jsonpath='{.data.tls\.key}'|base64 --decode > /etc/nginx/ssl/yourdomain.com.key
openssl x509 -in fullchain.cer -text

kubectl create secret tls yourdomain.com-tls --cert=/root/.acme.sh/yourdomain.com/fullchain.cer --key=/root/.acme.sh/yourdomain.com/yourdomain.com.key -n istio-system

## zerossl

kubectl create secret generic \
       zero-ssl-eabsecret \
       --namespace=cert-manager \
       --from-literal=secret='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

# cat zerosslclusterissuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: zerossl-production
spec:
  acme:
    # ZeroSSL ACME server
    server: https://acme.zerossl.com/v2/DV90
    email: xxxxx@xxxxxxxx.com

    # name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: zerossl-prod

    # for each cert-manager new EAB credencials are required
    externalAccountBinding:
      keyID: xxxxxxxxxxxxxxxx
      keySecretRef:
        name: zero-ssl-eabsecret
        key: secret
      keyAlgorithm: HS256

    solvers:
    - dns01:
        webhook:
          groupName: acme.yourdomain.com
          solverName: alidns
          config:
            region: ""
            accessKeySecretRef:
              name: alidns-secret
              key: access-key
            secretKeySecretRef:
              name: alidns-secret
              key: secret-key
      selector:
        dnsNames:
        - yourdomain.com
        - "*.yourdomain.com"
        - "*.s3.yourdomain.com"

# cat zerosslyourdomain-cert.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: yourdomain-tls-zerossl
spec:
  secretName: yourdomain-tls
  #commonName: yourdomain.com
  dnsNames:
  - "yourdomain.com"
  - "*.yourdomain.com"
  - "*.s3.yourdomain.com"
  issuerRef:
    name: zerossl-production
    kind: ClusterIssuer
    #name: letsencrypt
    #kind: Issuer

kubectl  apply -f zerosslclusterissuer.yaml
kubectl  apply -f zerosslyourdomain-cert.yaml -n istio-system