2 min read

Kubernetes Ingress ile SSL Offloading

Kubernetes ingress ile erişime açtığımız uygulamalara güvenli erişim ihtiyacımız zaman zaman ortaya çıkıyor. Bu durum için farklı bir katman ekleyerek SSL offloading işlemini Apache, Nginx veya HAProxy gibi ürünlerle gerçekleştirebiliriz; ancak bu işin daha kolay bir yolu var: Ingress modülleri SSL sertifikasını eklemeyi destekliyor. Bu işlem için sertifikalarımızı master sunucuya kopyalıyoruz. Aşağıdaki komutu çalıştırırken sertifikaların belirtilen dizinde bulunduğuna emin olun.

Not: Kullandığım geçerli sertifikanın kök sertifika bilgileri bazı ortamlarda bulunmadığı için doğruluk konusunda sorun yaşıyorum. Bu durumdan kurtulmak için bundle kullanıyorum.

Sertifika Oluşturma

İlk adım olarak, SSL sertifikamızı oluşturmak için aşağıdaki komutu kullanıyoruz. cpynet.com alan adımızı kullanarak sertifikayı oluşturuyoruz:

kubectl create secret tls cpynet.com --key node.cpynet.com.key --cert node.cpynet.com.ca-bundle

Ingress Tanımı

Daha sonra ingress kaydımızda TLS yapılandırmasını ekliyoruz. Aşağıdaki gibi bir tanım oluşturmalıyız:

tls:
    - hosts:
      - node.cpynet.com
      secretName: cpynet.com

Örnek Ingress Kaydı

Örnek bir ingress kaydı aşağıdaki gibi olacaktır:

yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: node
  namespace: default
spec:
  ingressClassName: kong
  tls:
    - hosts:
      - node.cpynet.com
      secretName: cpynet.com
  rules:
  - host: node.cpynet.com
    http:
      paths:
      - path: /api-testpipeline
        pathType: Prefix
        backend:
          service:
            name: node
            port:
              number: 80

Full Manifest Dosyası

Uygulamamız için gereken tam manifest dosyası aşağıdaki gibidir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: node
  namespace: default
  labels:
    app: node
spec:
  replicas: 2
  revisionHistoryLimit: 3
  selector:
    matchLabels:
      app: node
  template:
    metadata:
      labels:
        app: node
    spec:
      containers:
        - name: node
          image: nexus.cpynet.com:8083/node:3.3
          imagePullPolicy: Always
          resources:
            limits:
              memory: 6144Mi
            requests:
              memory: 2048Mi
          ports:
            - containerPort: 80
      imagePullSecrets:
        - name: paytrnexus
---
apiVersion: v1
kind: Service
metadata:
  name: node
  namespace: default
  labels:
    app: node
spec:
  ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
    - port: 443
      targetPort: 443
      protocol: TCP
      name: https
  selector:
      app: node
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: node
  namespace: default
spec:
  ingressClassName: kong
  tls:
    - hosts:
      - node.cpynet.com
      secretName: cpynet.com
  rules:
  - host: node.cpynet.com
    http:
      paths:
      - path: /api-testpipeline
        pathType: Prefix
        backend:
          service:
            name: node
            port:
              number: 80

Kontrol Etme

Tüm işlemleri Kubernetes ortamına deploy ettikten sonra, erişiminizi kontrol edebilirsiniz. Bu şekilde, uygulamanıza güvenli bir şekilde SSL üzerinden erişim sağlayabilirsiniz.