Kubernetes API’nı Ingress Nginx ile Dışarıya Açmak

Kubernetes API’nı Ingress Nginx ile Dışarıya Açmak

Merhaba, bu yazımda bare metal kurulumlarda bazen ihtiyaç duyulabilen kubeapi servisini dışarıya açmak için Ingress Nginx’i kullanmadan bahsedeceğim. Her Kubernetes clusterımızı yönetme ihtiyacı duyduğumuzda iç ağa erişemeyebiliriz. Bu durumda SSH veya VPN ile işimizi görebilsek de bu iki protokole ihtiyaç duymadan Kubernetes API’na erişmek daha rahat ve hızlı olacaktır. Burada karşımıza iki seçenek çıkıyor. Bunlardan ilki Kubelet daemonunun dinlediği portu forward etmek ama bu her durumda mümkün olmayabilir. Biz onun yerine ikinci seçenek olan halihazırda kullandığımız ingress-nginx ile kubernetes servisini proxylemeyi inceleyeceğiz. Burada yapacağımız şey aslında tek bir portu kullanarak farklı domainler ile bu işi kotarmak olacak ve tabi ki bunu iki servis de http protokolü ile çalıştığı için gerçekleştirebiliyoruz. Farklı hostname olayını biraz daha açmak gerekirse diyelim ki example.com domaini üzerinden projemizin http servisini sağlıyoruz ve aynı port üzerinden Kubernetes API’nı da dışarıya açmak istiyoruz. Bunun için aşağıdaki gibi bir Ingress tanımlayarak example.com domaini ile gelen kullanıcılara projemizi, k8s.example.com domaini ile gelen kullanıcılara ise Kubernetes API’nı sunabiliriz. Peki biz Kubernetes API’na erişirken cluster dışından bir porta bağlanıyoruz, Ingress tanımlarkense isteği cluster içinde bir servise yönlendirmemiz gerekiyor bu durumda ne yapmalıyız? Kubernetes’i tasarlarken API’a içeriden erişebilmemiz için default namespace’inde kubernetes adında bir servis tanımlamışlar. Biz de gelen istekleri bu servise yönlendireceğiz.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kubeapi
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/secure-backends: "true"
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: "k8s.example.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: kubernetes
            port:
              number: 443

Bu dosyadaki değerleri inceleyecek olursak: 13. satırda Ingress’in geln isteği hangi domainden gelindiği zaman Kubernetes API’na yönlendireceğini tanımlıyoruz, 16. satırda ise path değişkenindeki değerden sonra ne gelirse gelsin bu kuralın çalışacağını belirttik, 17. satırda pathi kök olarak belirttik, 20. ve 22. satırda ise kuralın yönlendireceği servisi ve portu belirttik. Buraya kadar aslında normal bir Ingress tanımlarken ne yapıyorsak onu yaptık. İşin asıl esprisi Ingress Nginx Annotation’larında. Bu annotationlar’ı inceleyecek olursak: 7. ve 9. satırda proxylenecek servisin SSL kullandığını ve HTTPS protokolü ile çalıştığını belirttik. 8. satırda ise SSL’in Ingress Nginx’te değil içerideki serviste sonlanması gerektiğini belirttik.

Enes UYSAL avatarı

Bir yanıt yazın

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