Ana içeriğe geç

Wallarm Servis Entegrasyonlu NGINX Ingress Controller Dağıtımı

Bu talimatlar, Wallarm NGINX tabanlı Ingress controller'ı K8s kümenize dağıtmanız için gerekli adımları sağlar. Çözüm, Wallarm Helm chart'ından dağıtılır.

Çözüm, entegre Wallarm servisleriyle birlikte çalışan Community Ingress NGINX Controller üzerine inşa edilmiştir. En son sürüm, NGINX stable 1.25.5 kullanan Community Ingress NGINX Controller 1.11.3'ü temel almaktadır.

Aşağıdaki mimariye sahiptir:

Solution architecture

Kullanım Senaryoları

Desteklenen tüm Wallarm dağıtım seçenekleri arasında, bu çözüm aşağıdaki kullanım senaryoları için önerilmektedir:

  • Community Ingress NGINX Controller ile uyumlu Ingress kaynaklarına trafik yönlendiren bir Ingress controller ve güvenlik katmanı bulunmamaktadır.

  • Halihazırda Community Ingress NGINX Controller kullanıyorsanız ve hem standart controller işlevselliği hem de geliştirilmiş güvenlik özellikleri sunan bir güvenlik çözümü arıyorsanız. Bu durumda, mevcut yapılandırmanızı yeni bir dağıtıma geçirerek bu talimatlarda ayrıntıları verilen Wallarm-NGINX Ingress Controller'a kolayca geçiş yapabilirsiniz.

    Mevcut Ingress controller ile Wallarm controller'ın eşzamanlı kullanımı için, yapılandırma ayrıntıları konusunda Ingress Controller chaining guide'a bakınız.

Gereksinimler

  • Kubernetes platform version 1.26-1.30

  • Helm package manager

  • Compatibility of your services with the Community Ingress NGINX Controller version 1.11.5

  • Access to the account with the Administrator role in Wallarm Console for the US Cloud or EU Cloud

  • Access to https://us1.api.wallarm.com for working with US Wallarm Cloud or to https://api.wallarm.com for working with EU Wallarm Cloud

  • Access to https://charts.wallarm.com to add the Wallarm Helm charts. Ensure the access is not blocked by a firewall

  • Access to the Wallarm repositories on Docker Hub https://hub.docker.com/r/wallarm. Make sure the access is not blocked by a firewall

  • Access to the IP addresses below for downloading updates to attack detection rules and API specifications, as well as retrieving precise IPs for your allowlisted, denylisted, or graylisted countries, regions, or data centers

    34.96.64.17
    34.110.183.149
    35.235.66.155
    34.102.90.100
    34.94.156.115
    35.235.115.105
    
    34.160.38.183
    34.144.227.90
    34.90.110.226
    

Ayrıca bakınız

Bilinen Kısıtlamalar

  • Postanalytics modülü olmadan çalışma desteklenmemektedir.

  • Postanalytics modülünün ölçek küçültülmesi, kısmi bir saldırı verisi kaybına yol açabilir.

Kurulum

  1. Wallarm Ingress controller'ı kurun.

  2. Ingress'iniz için trafik analizini etkinleştirin.

  3. Wallarm Ingress controller işlem durumunu kontrol edin.

Adım 1: Wallarm Ingress Controller'ın Kurulması

Wallarm Ingress Controller'ı kurmak için:

  1. Uygun tipteki bir filtering node token'ı oluşturun:

    1. Wallarm Console → SettingsAPI tokens bölümünü US Cloud veya EU Cloud'da açın.
    2. Deploy kaynak rolüne sahip bir API token'ı bulun ya da oluşturun.
    3. Bu token'ı kopyalayın.
    1. Wallarm Console → US Cloud veya EU Cloud'daki Nodes bölümünü açın.
    2. Wallarm node tipinde bir filtering node oluşturup oluşturulan token'ı kopyalayın.

      Creation of a Wallarm node

  2. Helm chart'ı ile Wallarm Ingress controller'ı dağıtmak için bir Kubernetes namespace oluşturun:

    kubectl create namespace <KUBERNETES_NAMESPACE>
    
  3. Wallarm chart deposunu ekleyin:

    helm repo add wallarm https://charts.wallarm.com
    helm repo update wallarm
    
  4. Wallarm yapılandırması ile values.yaml dosyasını oluşturun. Minimum yapılandırmaya sahip dosya örneği aşağıdadır.

    API token kullanılırken, nodeGroup parametresinde bir node grubu adı belirtin. Node'unuz, Wallarm Console'un Nodes bölümünde gösterilen bu gruba atanacaktır. Varsayılan grup adı defaultIngressGroup'dur.

    controller:
      wallarm:
        enabled: "true"
        token: "<NODE_TOKEN>"
        apiHost: "us1.api.wallarm.com"
        # nodeGroup: defaultIngressGroup
    
    controller:
      wallarm:
        enabled: "true"
        token: "<NODE_TOKEN>"
        # nodeGroup: defaultIngressGroup
    

    Wallarm node token'ını Kubernetes secret'larında depolayarak Helm chart'a çekebilirsiniz. Read more

    Deployment from your own registries

    Wallarm Ingress controller'ı, kendi depolarınızda saklanan imajlardan kurmak için values.yaml dosyasındaki öğeleri geçersiz kılabilirsiniz.

  5. Wallarm paketlerini kurun:

    helm install --version 5.3.0 <RELEASE_NAME> wallarm/wallarm-ingress -n <KUBERNETES_NAMESPACE> -f <PATH_TO_VALUES>
    
    • <RELEASE_NAME> Ingress controller chart'ının Helm release adı
    • <KUBERNETES_NAMESPACE> Wallarm Ingress controller ile Helm chart'ı için oluşturduğunuz Kubernetes namespace
    • <PATH_TO_VALUES> values.yaml dosyasının yolu

Adım 2: Ingress'iniz için Trafik Analizinin Etkinleştirilmesi

kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-mode=monitoring
kubectl annotate ingress <YOUR_INGRESS_NAME> -n <YOUR_INGRESS_NAMESPACE> nginx.ingress.kubernetes.io/wallarm-application="<APPLICATION_ID>"
  • <YOUR_INGRESS_NAME> Ingress'inizin adı

  • <YOUR_INGRESS_NAMESPACE> Ingress'inizin namespace'i

  • <APPLICATION_ID> uygulamalarınıza veya uygulama gruplarınıza özgü, pozitif bir sayı. Bu, ayrı istatistikler elde etmenize ve ilgili uygulamalara yönelik saldırıları ayırt etmenize olanak sağlayacaktır

Adım 3: Wallarm Ingress Controller İşleyişinin Kontrol Edilmesi

  1. Pod listesini alın:

    kubectl get pods -n <NAMESPACE> -l app.kubernetes.io/name=wallarm-ingress
    

    Her pod şu bilgileri göstermelidir: STATUS: Running ve READY: N/N. Örneğin:

    NAME                                                              READY     STATUS    RESTARTS   AGE
    ingress-controller-nginx-ingress-controller-675c68d46d-cfck8      3/3       Running   0          5m
    ingress-controller-nginx-ingress-controller-wallarm-tarantljj8g   4/4       Running   0          5m
    
  2. Test Path Traversal saldırısı içeren isteği Ingress Controller Servisine gönderin:

    curl http://<INGRESS_CONTROLLER_IP>/etc/passwd
    

    Filtreleme node'u block modunda çalışıyorsa, isteğe yanıt olarak 403 Forbidden kodu dönecek ve saldırı Wallarm Console → Attacks bölümünde görüntülenecektir.

ARM64 Dağıtımı

NGINX Ingress controller'ın Helm chart sürüm 4.8.2 ile ARM64 işlemci uyumluluğu tanıtılmıştır. Başlangıçta x86 mimarisi için ayarlanmış olan dağıtım, ARM64 node'larında dağıtım yapılırken Helm chart parametrelerinin değiştirilmesini gerektirir.

ARM64 ayarlarında, Kubernetes node'ları genellikle arm64 etiketine sahiptir. Kubernetes scheduler'ın Wallarm iş yükünü uygun node tipine tahsis etmesine yardımcı olmak için, Wallarm Helm chart yapılandırmasında nodeSelector, tolerations veya affinity kuralları kullanılarak bu etikete referans verin.

Aşağıda, ilgili nodlar için kubernetes.io/arch: arm64 etiketini kullanan Google Kubernetes Engine (GKE) için Wallarm Helm chart örneği verilmiştir. Bu şablon, diğer bulut kurulumlarının ARM64 etiketleme standartlarına uyum sağlayacak şekilde değiştirilebilir.

controller:
  nodeSelector:
    kubernetes.io/arch: arm64
  admissionWebhooks:
    nodeSelector:
      kubernetes.io/arch: arm64
    patch:
      nodeSelector:
        kubernetes.io/arch: arm64
  wallarm:
    tarantool:
      nodeSelector:
        kubernetes.io/arch: arm64
    enabled: true
    token: "<NODE_TOKEN>"
    apiHost: "us1.api.wallarm.com" # if using EU Cloud, comment out this line
    # If using an API token, uncomment the following line and specify your node group name
    # nodeGroup: defaultIngressGroup
controller:
  tolerations:
    - key: kubernetes.io/arch
      operator: Equal
      value: arm64
      effect: NoSchedule
  admissionWebhooks:
    patch:
      tolerations:
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule
  wallarm:
    tarantool:
      tolerations:
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule
    enabled: true
    token: "<NODE_TOKEN>"
    apiHost: "us1.api.wallarm.com" # if using EU Cloud, comment out this line
    # If using an API token, uncomment the following line and specify your node group name
    # nodeGroup: defaultIngressGroup

Kendi Depolarınızdan Dağıtım

Güvenlik politikalarınız gibi nedenlerle Wallarm genel deposundan Docker imajlarını çekemiyorsanız, bunun yerine:

  1. Bu imajları kendi özel deponuza kopyalayın.

  2. Wallarm NGINX tabanlı Ingress controller'ı bu imajları kullanarak kurun.

NGINX tabanlı Ingress Controller dağıtımı için Helm chart tarafından kullanılan Docker imajları şunlardır:

Kendi deponuzda saklanan imajları kullanarak Wallarm NGINX tabanlı Ingress controller'ı kurmak için, Wallarm Ingress controller Helm chart'ının values.yaml dosyasını aşağıdaki gibi geçersiz kılın:

controller:
  image:
    ## The image and tag for wallarm nginx ingress controller
    ##
    registry: <YOUR_REGISTRY>
    image: wallarm/ingress-controller
    tag: <IMAGE_TAG>
  wallarm:
    helpers:
      ## The image and tag for the helper image
      ##
      image: <YOUR_REGISTRY>/wallarm/node-helpers
      tag: <IMAGE_TAG>

Ardından, değiştirilmiş values.yaml dosyasını kullanarak kurulumu gerçekleştirin.

Yapılandırma

Wallarm Ingress controller başarılı bir şekilde kurulduktan ve kontrol edildikten sonra, aşağıdakiler gibi gelişmiş yapılandırmalar yapabilirsiniz:

Gelişmiş yapılandırma için kullanılan parametreler ve ilgili talimatlar hakkında bilgi almak için lütfen configure-nginx-ing-controller-docs'a bakınız.