Ana içeriğe geç

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çin https://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

    node-data0.us1.wallarm.com - 34.96.64.17
    node-data1.us1.wallarm.com - 34.110.183.149
    us1.api.wallarm.com - 35.235.66.155
    34.102.90.100
    34.94.156.115
    35.235.115.105
    
    node-data1.eu1.wallarm.com - 34.160.38.183
    node-data0.eu1.wallarm.com - 34.144.227.90
    api.wallarm.com - 34.90.110.226
    
  • 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:

  1. Resmi Wallarm denetleyici Helm chart’ını, mevcut Ingress denetleyicisinden farklı bir Ingress sınıfı değeri kullanarak dağıtın.

  2. Şunlarla birlikte Wallarm’a özel Ingress nesnesi oluşturun:

    • Wallarm Ingress Helm chart’ının values.yaml dosyasında belirtilen ingressClass 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.

  3. Mevcut Ingress denetleyicisini, gelen istekleri uygulama servisleri yerine yeni Wallarm Ingress denetleyicisine iletecek şekilde yeniden yapılandırın.

  4. Wallarm Ingress denetleyicisinin çalışmasını test edin.

Adım 1: Wallarm Ingress denetleyicisini dağıtın

  1. Uygun türde bir filtreleme düğümü belirteci oluşturun:

    1. Wallarm Console → SettingsAPI tokens öğesini US Cloud veya EU Cloud üzerinde açın.
    2. Kullanım türü Node deployment/Deployment olan bir API token’ını bulun veya oluşturun.
    3. Bu token'ı kopyalayın.
    1. Wallarm Console → Nodes öğesini US Cloud veya EU Cloud üzerinde açın.
    2. Wallarm node türünde bir filtreleme düğümü oluşturun ve üretilen token'ı kopyalayın.

      Bir Wallarm düğümünün oluşturulması

  2. Wallarm Helm chart’ları deposunu ekleyin:

    helm repo add wallarm https://charts.wallarm.com
    helm repo update
    

  3. 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.

  4. 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ır
    • values.yaml, önceki adımda oluşturulan Helm değerlerini içeren YAML dosyasıdır
    • wallarm-ingress, Helm chart’ın yükleneceği ad alandır (oluşturulacaktır)
  5. Wallarm Ingress denetleyicisinin çalışır durumda olduğunu doğrulayın:

    kubectl get pods -n wallarm-ingress
    

    Wallarm pod durumu STATUS: Running ve READY: N/N olmalıdır:

    NAME                                                                  READY   STATUS    RESTARTS   AGE
    ingress-controller-wallarm-ingress-controller-6d659bd79b-952gl        3/3     Running   0          8m7s
    ingress-controller-wallarm-ingress-controller-wallarm-wstore-7ddmgbfm 3/3     Running   0          8m7s
    

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:

curl -H "Host: www.example.com" ${LB_IP}/etc/passwd