Limitazione degli indirizzi IP esterni assegnabili ai servizi - Amazon EKS

Limitazione degli indirizzi IP esterni assegnabili ai servizi

I servizi Kubernetes possono essere raggiunti dall'interno di un cluster tramite:

  • Un indirizzo IP del cluster assegnato automaticamente da Kubernetes

  • Qualsiasi indirizzo IP specificato per la proprietà externalIPs in una specifica di servizio. Gli indirizzi IP esterni non sono gestiti da Kubernetes e sono responsabilità dell'amministratore del cluster. Gli Indirizzi IP esterni specificati con externalIPs sono diversi dall'indirizzo IP esterno assegnato a un servizio di tipo LoadBalancer da un provider cloud.

Per ulteriori informazioni sui servizi Kubernetes, consultare Servizio nella documentazione Kubernetes. È possibile limitare gli indirizzi IP che possono essere specificati per externalIPs in una specifica di servizio.

Per limitare gli indirizzi IP che possono essere specificati per externalIPs in una specifica di servizio

  1. Implementare Cert-Manager per gestire i certificati webhook. Per ulteriori informazioni, consultare la documentazione Cert-Manager.

    kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
  2. Verificare che i pod di Cert-Manager siano in esecuzione.

    kubectl get pods -n cert-manager

    Output

    NAME READY STATUS RESTARTS AGE cert-manager-58c8844bb8-nlx7q 1/1 Running 0 15s cert-manager-cainjector-745768f6ff-696h5 1/1 Running 0 15s cert-manager-webhook-67cc76975b-4v4nk 1/1 Running 0 14s
  3. Esaminare i servizi esistenti per assicurarsi che a nessuno di essi siano assegnati indirizzi IP esterni non contenuti nel blocco CIDR per cui si desidera limitare gli indirizzi.

    kubectl get services --all-namespaces

    Output

    NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cert-manager cert-manager ClusterIP 10.100.102.137 <none> 9402/TCP 20m cert-manager cert-manager-webhook ClusterIP 10.100.6.136 <none> 443/TCP 20m default kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 2d1h externalip-validation-system externalip-validation-webhook-service ClusterIP 10.100.234.179 <none> 443/TCP 16s kube-system kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 2d1h my-namespace my-service ClusterIP 10.100.128.10 192.168.1.1 80/TCP 149m

    Se uno qualsiasi dei valori costituiscono indirizzi IP che non si trovano all'interno del blocco per cui si desidera limitare l'accesso, sarà necessario modificare gli indirizzi in modo che si trovino all'interno del blocco e implementare nuovamente i servizi. Ad esempio, al servizio my-service nell'output precedente è assegnato un indirizzo IP esterno che non rientra nel blocco CIDR di esempio del passaggio 5.

  4. Eseguire il download del manifesto del webhook IP esterno. È anche possibile visualizzare il codice sorgente per il webhook su GitHub.

    curl -o externalip-webhook.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
  5. Aprire il file scaricato nell'editor e rimuovere il # all'inizio delle righe seguenti.

    #args: #- --allowed-external-ip-cidrs=10.0.0.0/8

    Sostituire 10.0.0.0/8 con il proprio blocco CIDR. É possibile specificare tutti i blocchi che si desiderano. Se si specificano blocchi multipli, aggiungere una virgola tra i blocchi.

  6. Se il cluster non è nella Regione AWS us-west-2, sostituisci us-west-2, 602401143452 e .amazonaws.com/ con i valori appropriati per la Regione AWS in uso nell'elenco in Registri delle immagini del container Amazon.

    image:602401143452.dkr.ecr.us-west-2.amazonaws.com/externalip-webhook:v1.0.0
  7. Applicare il manifesto al cluster.

    kubectl apply -f externalip-webhook.yaml

    Qualsiasi tentativo di implementare un servizio nel cluster con un indirizzo IP specificato per externalIPs che non è contenuto nei blocchi specificati nel passaggio 5 avrà esito negativo.