Kubernetes Ingress 17/20

Merhaba değerli arkadaşlar, Kubernetes eğitim serimizin bu yazısında Ingress konusunu yazacağım. Bu bölümün sonunda;

  • Ingress Controller ile Service arasıdaki farkı görebilecek,
  • Ingress Controller dağıtımı yapabilecek ve
  • Ingress Rule yapılandırması yapabileceksiniz.

Peki o halde şimdi şunu öğrenelim, nedir bu Ingress denilen olay?

Daha önceki yazılarımda bir uygulamayı cluster dışında göstermek için servisler kullanmıştık. Aynı işlevi yapmak için Ingress Controller ve Kurallarını(Rules) kullanırız. Burdaki en temel fark verimliliktir. LoadBalancer gibi birçok servis kullanmak yerine, isteği host veya ilgili path’deki trafiğe yönlendirebilirsiniz. Bu olay birçok servisin tek bir noktada merkezileştirilmesine olanak sağlar.

Ingress Controller

Ingress Controller, çoğu controller’dan farklıdır. Çünkü kube-controller-manager’ın bir parçası olarak çalışmaz. Her biri benzersiz bir yapılandırmaya sahip birden fazla controller dağıtabilirsiniz. Bir controller cluster dışından gelen trafiği işlemek için Ingress Rule‘larını kullanır.

Desteklenen iki tane controller var: GCE ve nginx. HAProxy ve Traefix.io da yaygın olarak kullanılmaktadır. Reverse Proxy özelliğine sahip herhangi bir araç çalıştırılmalıdır. Bu araçlar sayesinde kurallar uygulanır ve ilişkili trafik dinlenir. Ingress Rule, kubectl ile oluşturabileceğiniz bir API kaynağıdır. Bu kaynağı oluşturduğunuz zaman trafiğin dışarıdan bir iç serviese akmasına izin vermek için Ingress Controller yeniden programlanır ve yapılandırılır. Bir servisi ClusterIP türünde bırakabilir ve Ingress Rule kullanarak trafiğin bu dahili hizmete nasıl yönlendirileceğini tanımlayabilirsiniz.

Ingress Controller, extensions/v1beta1 grubunda yer alan ve /ingresses endpoint’ini izleyen pod’da çalışan bir servistir. Yeni bir endpoint oluşturulduğunda, çoğu zaman HTTP trafiği olan bir hizmete gelen bağlantıyı izin vermek için yapılandırılmış kurallar kümesini kullanır. Pod’un nerede konuşlandırıldığına bakılmaksızın, bir edge router üzerinden pod’lara servisle birlikte kolay erişim sağlanır.

nginx

Bir nginx controller’ın dağıtılması için bu linkteki GitHub bulacağınız YAML dosyasını kullanarak dağıtmanız sizin açınızdan kolay olacaktır. Linkte belirttiğim GitHub sayfası nginx, AWS, GKE, Azure gibi birçok platformda yapılandırma yapmak için dosyalar barındırmaktadır.

Uygun bir şekilde Ingress Controller dağıtmak için bazı yapılandırma gereksinimleri vardır. ConfigMap, Annotations gibi özellikler kullanılarak özel bir şablon oluşturulabilir.

Google Load Balancer Controller (GLBC)

GCE Ingress Controller yerleştermek için oluşturulması gereken birkaç nesne vardır. YAML dosyaları işlemi kolaylaştırmak için kullanılabilir. Her servis için çeşitli servisler oluşturulacağını ve quota’ların oluşturulmadan önce değerlendirilmediğini unutmamız gereken noktalardandır.

Öncelikle GLBC Controller oluşturulmalı ve başlatılmalıdır. Ayrıca tek bir kopyaya sahip bir ReplicationController, uygulama pod’u için üç servis ve ingress için servis başına iki hostname ve üç endpoint oluşturmalısınız.

Trafik için her path, pool adı verilen benzer nesne gurubunu kullanır. Her pool bağlantıyı sağlamak için düzenli olarak bir sonraki sıçramayı(hop up) kontrol eder.

Multi-pool path için;

Global Forwarding Rule -> Target HTTP Proxy -> URL map -> Backend Service -> Instance Group.

Şuanda, TLS Ingress sadece 443 portunu destekelr ve TLS sonlandırılmasını üstlenir. Sadece ilk sertifikayı kullanarak SNI’yi desteklemiyor. TLS secret değeri tls.crt ve tls.key adında anahtarlar içermelidir.

Ingress API Kaynakları

Ingress nesneleri, Deployments ve ReplicaSets gibi halen extensions grubuna ait API nesneleridir. API sunucusuna POST yapabileceğiniz tipik bir Ingress nesnesi;

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ghost
spec:
  rules:
  - host: ghost.192.168.99.100.nip.io
    http:
    paths:
    - backend:
        serviceName: ghost
        servicePort: 2368 

Aşağıdaki kubectl komutlarını kullanarak API nesnesini yönetebilirsiniz.

$ kubectl get ingress
$ kubectl delete ingress <ingress_name>
$ kubectl edit ingress <ingress_name>

Birden fazla Ingress Rule eklemek istersek aşağıdaki gibi rules içerisindeki host’ları çoğaltabilirsiniz.

rules:
- host: ghost.192.168.99.100.nip.io
  http:
    paths:
    - backend:
        serviceName: ghost  
        servicePort: 2368
- host: nginx.192.168.99.100.nip.io
  http:
    paths:
    - backend:
        serviceName: nginx
        servicePort: 80

Kubernetes Ingress yazımızı burada bitiriyoruz. Umarım Servisler ile Ingress Controller’lar arasındaki farkı anlayabilmişsinizdir. Bir sonraki yazımda Ingress Controller kurulumu ve yapılandırmasını anlatacağım. Ingress ile ilgili laboratuvar yazıma buradan ulaşabilirsiniz, kendinize dikkat edin, görüşmek üzere !!

Umarım bu yazı sizin için bilgilendirici olmuştur. Yazıyla ilgili bir sorunuz, görüşünüz veya isteğiniz varsa alt kısımda bulunan yorumlardan veya mail adresimden iletişime geçebilirsiniz. Bu yazının başkaları içinde bilgilendirici olduğunu düşünüyorsanız sosyal olun ve sosyal medyada paylaşın! Okuduğunuz için teşekkürler !!!!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir