Come posso limitare gli indirizzi IP CIDR per un servizio di tipo LoadBalancer in Amazon EKS?

4 minuti di lettura
0

Voglio limitare gli indirizzi IP CIDR per un servizio di tipo LoadBalancer in Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrizione

Quando crei un servizio di tipo LoadBalancer, le richieste dall'origine 0.0.0.0/0 sono consentite per impostazione predefinita. Se il bilanciatore del carico è in una sottorete pubblica, le richieste vengono indirizzate ai nodi worker da qualsiasi punto di Internet.

Per limitare l'origine invece di 0.0.0.0/0, usa loadBalancerSourceRanges.

Soluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Configurazione dell’ambiente

Per configurare l’ambiente, completa i seguenti passaggi:

  1. Crea un cluster Amazon EKS.
  2. Crea e poi avvia i nodi worker.
  3. Configura kubectl.
  4. Configura l'interfaccia AWS CLI.
  5. Configura il controller del bilanciatore del carico AWS.
    Nota: per il servizio di tipo LoadBalancer, il conroller del bilanciatore del carico AWS supporta la modalità IP Network Load Balancer (NLB) versione 2.0.0 o successiva e la modalità di istanza NLB 2.2.0 o successiva.

Importante: per assegnare un nuovo Network Load Balancer ai servizi di tipo LoadBalancer, è consigliabile utilizzare il controller del bilanciatore del carico AWS anziché il controller del bilanciatore del carico Kubernetes Service. Per la versione più recente del controller del bilanciatore del carico AWS, consulta aws-load-balancer-controller sul sito Web GitHub.

Limitazione degli indirizzi IP CIDR

Scegli uno dei seguenti metodi per specificare i valori di loadBalancerSourceRanges.

Uso di un'annotazione

Usa un'annotazione nel file manifesto del servizio (svc.yaml).

Esempio di annotazione:

service.beta.kubernetes.io/load-balancer-source-ranges: 143.231.0.0/16

Per ulteriori informazioni, consulta Access control sul sito web di Kubernetes.

Aggiunta del campo loadBalancerSourceRanges

  1. Aggiungi il campo .spec.loadBalancerSourceRanges nel file svc.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
      name: nginx
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: "external"
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
        service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx
      type: LoadBalancer
      loadBalancerSourceRanges:
      - "143.231.0.0/16"
  2. Esegui il comando seguente per applicare il file svc.yaml:

    $ kubectl apply -f svc.yaml

    Esegui il comando seguente per controllare i log dei pod del controller del bilanciatore del carico AWS:

    $ kubectl logs -f <aws load balancer controller pod> -n <namespace>
  3. Il controller del bilanciatore del carico AWS aggiunge gli intervalli di origine dei bilanciatori del carico configurati nelle regole in entrata del gruppo di sicurezza. Per confermare che le regole in entrata del gruppo di sicurezza siano state modificate, esegui il seguente comando:

    $ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
    ...
        "CidrIp": "143.231.0.0/16"
    ...
  4. Se utilizzi un Network Load Balancer in modalità IP, il campo .spec.loadBalancerSourceRanges viene ignorato per impostazione predefinita. In questo caso, usa la seguente annotazione per attivare la conservazione dell’IP del client:

    service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true

    Per un servizio di tipo Network Load Balancer, potrebbe essere necessario aumentare il limite massimo del gruppo di sicurezza. Per ogni porta del nodo e intervallo CIDR della sottorete, il controller crea regole sul gruppo di sicurezza del nodo worker. Per ulteriori informazioni, consulta Ingress traffic sul sito web di Kubernetes.

    Nota: per un servizio di tipo Network Load Balancer, potrebbe essere necessario aumentare la quota massima del gruppo di sicurezza. Per ogni porta del nodo e intervallo CIDR della sottorete, il controller crea regole sul gruppo di sicurezza del nodo worker. Ad esempio, sono presenti nodi worker in tre zone di disponibilità. Aggiungi un loadBalancerSourceRange. Nel gruppo di sicurezza del nodo worker vengono create tre regole di controllo dello stato (una per sottorete) e una regola loadBalancerSourceRange. I gruppi di sicurezza hanno un limite predefinito di 60 regole. È possibile aumentare questa quota, ma il numero totale di gruppi di sicurezza per interfaccia di rete non può superare 1.000.

Informazioni correlate

Allowing users to access your cluster

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa