Aynı Kubernetes kümesinde Wallarm ve ek Ingress denetleyicilerinin zincirlenmesi¶
Bu talimatlar, Wallarm Ingress denetleyicisini K8s kümenize dağıtma ve onu ortamınızda halihazırda çalışan diğer denetleyicilerle zincirleme adımlarını sağlar.
Çözümün ele aldığı sorun¶
Wallarm, düğüm yazılımını farklı biçimlerde sunar; bunlardan biri de Community Ingress NGINX Controller üzerine inşa edilmiş Ingress Controller.
Zaten bir Ingress denetleyicisi kullanıyorsanız, mevcut Ingress denetleyicisini Wallarm denetleyicisiyle değiştirmek zor olabilir (ör. AWS ALB Ingress Controller kullanılıyorsa). Bu durumda, Wallarm Sidecar çözümünü değerlendirebilirsiniz; ancak bu da altyapınıza uymuyorsa birden fazla Ingress denetleyicisini zincirlemek mümkündür.
Ingress denetleyicilerinin zincirlenmesi, son kullanıcı isteklerini kümeye ulaştırmak için mevcut bir denetleyiciyi kullanmanıza ve gerekli uygulama korumasını sağlamak için ek bir Wallarm Ingress denetleyicisi dağıtmanıza olanak tanır.
Gereksinimler¶
-
Kubernetes platformu sürüm 1.26-1.30
-
Helm paket yöneticisi
-
US Cloud veya EU Cloud için Wallarm Console’da Administrator rolüne sahip hesaba erişim
-
US Wallarm Cloud ile çalışmak için
https://us1.api.wallarm.com
veya EU Wallarm Cloud ile çalışmak içinhttps://api.wallarm.com
adresine erişim -
Wallarm Helm chart’larını eklemek için
https://charts.wallarm.com
adresine erişim. Erişimin güvenlik duvarı tarafından engellenmediğinden emin olun -
Docker Hub üzerindeki Wallarm depolarına
https://hub.docker.com/r/wallarm
erişim. Erişimin güvenlik duvarı tarafından engellenmediğinden emin olun -
Saldırı tespit kuralları ve API spesifikasyonları güncellemelerini indirmek ve izin listesine, yasak listesine veya gri listeye alınmış ülkeleriniz, bölgeleriniz veya veri merkezleriniz için kesin IP’leri almak amacıyla aşağıdaki IP adreslerine erişim
-
Bir Ingress denetleyicisi çalıştıran dağıtılmış Kubernetes kümesi
Wallarm Ingress denetleyicisini dağıtma ve onu ek bir Ingress denetleyicisiyle zincirleme¶
Wallarm Ingress denetleyicisini dağıtmak ve ek denetleyicilerle zincirlemek için:
-
Resmi Wallarm denetleyici Helm chart’ını, mevcut Ingress denetleyicisinden farklı bir Ingress sınıfı değeri kullanarak dağıtın.
-
Şunlarla birlikte Wallarm’a özel Ingress nesnesi oluşturun:
- Wallarm Ingress Helm chart’ının
values.yaml
dosyasında belirtileningressClass
ile aynı değer. - Mevcut Ingress denetleyicisindekiyle aynı şekilde yapılandırılmış Ingress denetleyici istek yönlendirme kuralları.
Wallarm Ingress denetleyicisi küme dışına açılmayacaktır
Lütfen unutmayın, Wallarm Ingress denetleyicisi servisinde
ClusterIP
kullanır; bu da küme dışına açılmayacağı anlamına gelir. - Wallarm Ingress Helm chart’ının
-
Mevcut Ingress denetleyicisini, gelen istekleri uygulama servisleri yerine yeni Wallarm Ingress denetleyicisine iletecek şekilde yeniden yapılandırın.
-
Wallarm Ingress denetleyicisinin çalışmasını test edin.
Adım 1: Wallarm Ingress denetleyicisini dağıtın¶
-
Uygun türde bir filtreleme düğümü belirteci oluşturun:
-
Wallarm Helm chart’ları deposunu ekleyin:
-
Aşağıdaki Wallarm yapılandırmasıyla
values.yaml
dosyasını oluşturun:controller: wallarm: enabled: true token: "<NODE_TOKEN>" apiHost: us1.api.wallarm.com # nodeGroup: defaultIngressGroup config: use-forwarded-headers: "true" ingressClass: wallarm-ingress ingressClassResource: name: wallarm-ingress controllerValue: "k8s.io/wallarm-ingress" service: type: ClusterIP nameOverride: wallarm-ingress
controller: wallarm: enabled: true token: "<NODE_TOKEN>" # nodeGroup: defaultIngressGroup config: use-forwarded-headers: "true" ingressClass: wallarm-ingress ingressClassResource: name: wallarm-ingress controllerValue: "k8s.io/wallarm-ingress" service: type: "ClusterIP" nameOverride: wallarm-ingress
<NODE_TOKEN>
, Wallarm düğüm belirtecidir.- API token kullanırken,
nodeGroup
parametresinde bir düğüm grup adı belirtin. Düğümünüz bu gruba atanır ve Wallarm Console’un Nodes bölümünde görüntülenir. Varsayılan grup adıdefaultIngressGroup
değeridir.
Daha fazla yapılandırma seçeneği için lütfen şu bağlantıyı kullanın.
-
Wallarm Ingress Helm chart’ını yükleyin:
helm install --version 6.6.0 internal-ingress wallarm/wallarm-ingress -n wallarm-ingress -f values.yaml --create-namespace
internal-ingress
, Helm sürümünün adıdırvalues.yaml
, önceki adımda oluşturulan Helm değerlerini içeren YAML dosyasıdırwallarm-ingress
, Helm chart’ın yükleneceği ad alandır (oluşturulacaktır)
-
Wallarm Ingress denetleyicisinin çalışır durumda olduğunu doğrulayın:
Wallarm pod durumu STATUS: Running ve READY: N/N olmalıdır:
Adım 2: Wallarm’a özel ingressClassName
ile Ingress nesnesi oluşturun¶
Önceki adımda values.yaml
içinde yapılandırdığınızla aynı ingressClass
adına sahip Ingress nesnesini oluşturun.
Ingress nesnesi, uygulamanızın dağıtıldığı ad alanıyla aynı ad alanında olmalıdır; örneğin:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/wallarm-application: "1"
nginx.ingress.kubernetes.io/wallarm-mode: monitoring
name: myapp-internal
namespace: myapp
spec:
ingressClassName: wallarm-ingress
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp
port:
number: 80
Adım 3: Mevcut Ingress denetleyicisini istekleri Wallarm’a iletecek şekilde yeniden yapılandırın¶
Mevcut Ingress denetleyicisini, gelen istekleri uygulama servisleri yerine yeni Wallarm Ingress denetleyicisine iletecek şekilde aşağıdaki gibi yeniden yapılandırın:
-
ingressClass
adınginx
olacak şekilde Ingress nesnesi oluşturun. Bu değerin varsayılan olduğunu lütfen unutmayın; farklıysa kendi değerinizle değiştirebilirsiniz. -
Ingress nesnesi, Wallarm Ingress Chart ile aynı ad alanında olmalıdır; bu örnekte
wallarm-ingress
. -
spec.rules[0].http.paths[0].backend.service.name
değerinin, Helm sürüm adı ve.Values.nameOverride
birleşiminden oluşan Wallarm Ingress denetleyici servisinin adı olması gerekir.Adı almak için aşağıdaki komutu kullanabilirsiniz:
kubectl get svc -l "app.kubernetes.io/component=controller" -n wallarm-ingress -o=jsonpath='{.items[0].metadata.name}'
Bizim örneğimizde ad
internal-ingress-wallarm-ingress-controller
şeklindedir.
Ortaya çıkan yapılandırma örneği:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-external
namespace: wallarm-ingress
spec:
ingressClassName: nginx
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: internal-ingress-wallarm-ingress-controller
port:
number: 80
Adım 4: Wallarm Ingress denetleyicisinin çalışmasını test edin¶
Mevcut harici Ingress denetleyicisinin Load Balancer genel IP’sini alın; örneğin ingress-nginx
ad alanına dağıtıldığını varsayalım:
LB_IP=$(kubectl get svc -l "app.kubernetes.io/component=controller" -n ingress-nginx -o=jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
Mevcut Ingress denetleyicisi adresine bir test isteği gönderin ve sistemin beklendiği gibi çalıştığını doğrulayın: