Certmanager with Cloudflare deploy Kubernetes 1.25.2

Bu makalede Certmanager ile ingress tanımınızdaki adresler için (Cloudflare DNS hizmetler için) Let’s Encrypt sertifikalarını almayı inceleyeceğiz,

Yapıyı kısaca anlatmak gerekirse;

Kubernetes üzerinde ingress kullanarak yayınladığımız web sitelerimiz olduğunu düşünelim,

Yine bahsedilen web sitelerin Cloudflare üzerinde DNS yönetiminin olduğunu varsayalım,

Helm reposunu ekleyerek kuruluma başlayalım;

helm repo add jetstack https://charts.jetstack.io
helm repo update

helm upgrade --install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.9.1 --set installCRDs=true

installCRDs ile birlikte gelen; certificaterequests.cert-manager.io, orders.acme.cert-manager.io, challenges.acme.cert-manager.io objelerin oluşturulduğunu gözlemleyebiliriz.

Cloudflare ile arasındaki entegrasyon için Api token oluşturmamız gerekiyor.

Bunun için;

API Tokens

Tokens can be created at User Profile > API Tokens > API Tokens. The following settings are recommended:

Permissions:
Zone - DNS - Edit
Zone - Zone - Read
Zone Resources:
Include - All Zones

Bu adımdan sonra oluşturulan token bilgisini aşağıdaki gibi bir yaml dosyasına yazalım ve secret oluşturalım,

kubectl apply -f api-token-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: cloudflare-api-token-secret
type: Opaque
stringData:
  api-token: XXXXXXXX #burayatoken

Certmanager ile token bağlantısı için bir issuer oluşturmamız gerekiyor,

Eğer her namespace için farklı bir durum söz konusu ise issuer ile ilerleyebilirsiniz. Clusterissuer oluşturarak tüm namespaceler için global bir tanımda gerçekleştirebilirsiniz; https://cert-manager.io/docs/concepts/issuer/

Tanım sonrasında; kubectl apply -f cluster-issuer.yaml

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    email: mert@mnm.com.tr
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-prod
    solvers:
    - dns01:
        cloudflare:
          apiTokenSecretRef:
            key: api-token
            name: cloudflare-api-token-secret
          email: mert@mnm.com.tr
      selector:
        dnsZones:
        - derinmor.com

Bitnami Nginx chartı kullanarak deneme amaçlı bir ingress deploy edeceğim;

Geçici bir values dosyasına aşağıdaki verileri tanımlıyorum.

ingress:
  path: /
  hostname: deneme22.derinmor.com
  tls: true
  className: nginx
  enabled: true
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: letsencrypt-prod

Bu dosyayı göstererek deploy işlemini gerçekleştirelim,

helm upgrade --install nginx-test bitnami/nginx  --create-namespace -n nginx-test -f values.yaml

Sertifika için request, order gibi durumları aşağıdaki komutla izleyebilirsiniz.

watch -n1 -d kubectl get certificaterequests.cert-manager.io,orders.acme.cert-manager.io,challenges.acme.cert-manager.io

İsteklerin başladığını gözlemleyebiliriz;

Eğer entegrasyonda herhangi bir problem yok ise request sonrası order oluşturulmuş olacak

Erişim testi için ingress external adresi host dosyanıza ekleyebilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.