Usare un'istanza di Load Balancer Standard pubblica nel servizio Azure Kubernetes

Azure Load Balancer opera al livello 4 del modello OSI (Open Systems Interconnect) che supporta scenari in ingresso e in uscita. Distribuisce i flussi in ingresso che arrivano al front-end del servizio di bilanciamento del carico alle istanze del pool back-end.

Un servizio di bilanciamento del carico pubblico integrato con il servizio Azure Kubernetes svolge due scopi:

  • Fornire connessioni in uscita ai nodi del cluster all'interno della rete virtuale AKS traducendo l'indirizzo IP privato in un indirizzo IP pubblico che fa parte del pool di uscita.
  • Fornire l'accesso alle applicazioni tramite i servizi Kubernetes di tipo LoadBalancer, consentendo di ridimensionare facilmente le applicazioni e creare servizi a disponibilità elevata.

Questo articolo illustra l'integrazione con un servizio di bilanciamento del carico pubblico nel servizio Azure Kubernetes. Per l'integrazione del servizio di bilanciamento del carico interno, vedere Usare un servizio di bilanciamento del carico interno nel servizio Azure Kubernetes.

Prerequisiti

Important

Se si preferisce usare il gateway, il firewall o il proxy per fornire una connessione in uscita, è possibile ignorare la creazione del pool in uscita del servizio di bilanciamento del carico e il rispettivo indirizzo IP front-end usando il tipo in uscita come UserDefinedRouting (UDR). Il tipo in uscita definisce il metodo in uscita per un cluster e per impostazione predefinita è di tipo LoadBalancer.

Limitations

Quando si creano e si gestiscono cluster del servizio Azure Kubernetes che supportano un'istanza di bilanciamento del carico con SKU Standard, si applicano le limitazioni seguenti:

  • Il servizio Azure Kubernetes gestisce il ciclo di vita e le operazioni dei nodi dell'agente. La modifica delle risorse IaaS associate ai nodi dell'agente non è supportata. Un esempio di operazione non supportata consiste nell'apportare modifiche manuali al gruppo di risorse del servizio di bilanciamento del carico.

  • È necessario almeno un indirizzo IP pubblico o un prefisso dell'indirizzo IP per consentire il traffico in uscita dal cluster del servizio Azure Kubernetes. L'indirizzo IP pubblico o il prefisso dell'indirizzo IP è necessario per mantenere la connettività tra il piano di controllo e i nodi dell'agente e per mantenere la compatibilità con le versioni precedenti del servizio Azure Kubernetes. Sono disponibili le opzioni seguenti per specificare indirizzi IP pubblici o prefissi IP con un bilanciamento del carico SKU Standard :

    • Specificare gli indirizzi IP pubblici personalizzati.
    • Specificare i prefissi degli indirizzi IP pubblici personalizzati.
    • Specificare un numero massimo di 100 per consentire al cluster del servizio Azure Kubernetes di creare una certa quantità di indirizzi IP pubblici dello SKU Standard nello stesso gruppo di risorse come cluster del servizio Azure Kubernetes. Questo gruppo di risorse viene in genere denominato con MC_ all'inizio. Il servizio Azure Kubernetes assegna l'indirizzo IP pubblico all'istanza di bilanciamento del carico con SKU Standard. Per impostazione predefinita, un indirizzo IP pubblico viene creato automaticamente nello stesso gruppo di risorse del cluster del servizio Azure Kubernetes, se non è specificato alcun indirizzo IP pubblico, prefisso di indirizzo IP pubblico o numero di indirizzi IP. È necessario anche consentire gli indirizzi pubblici ed evitare di creare criteri di Azure che vietino la creazione di IP.
  • Non è possibile riutilizzare un indirizzo IP pubblico creato dal servizio Azure Kubernetes come indirizzo IP pubblico personalizzato (BYO). È necessario creare e gestire tutti gli indirizzi IP personalizzati.

  • Non è possibile modificare lo SKU del load balancer modificando direttamente la risorsa del load balancer gestita da AKS. Per eseguire la migrazione di un cluster del servizio Azure Kubernetes esistente dallo SKU Basic ritirato allo SKU Standard , usare il processo di aggiornamento del servizio Azure Kubernetes supportato. La migrazione comporta un periodo di inattività e non può essere annullata una volta avviata.

  • Le istanze di bilanciamento del carico con SKU Standard supportano solo indirizzi IP con SKU Standard.

  • Il servizio collegamento privato non è supportato quando il tipo di pool back-end del servizio di bilanciamento del carico è impostato su nodeIP.

Creare un servizio di bilanciamento del carico in AKS

Dopo aver creato un cluster del servizio Azure Kubernetes con tipo LoadBalancer in uscita (impostazione predefinita), il cluster è pronto per l'uso del servizio di bilanciamento del carico per esporre i servizi.

  1. Verifica che il cluster abbia almeno un pod in esecuzione e pronto con l'etichetta app: public-app. Il manifesto del servizio nel passaggio successivo seleziona i pod con questa etichetta, ma non crea una distribuzione.

    kubectl get pods -l app=public-app
    
  2. Creare un manifesto del servizio denominato public-svc.yaml, che crea un servizio pubblico di tipo LoadBalancer.

    apiVersion: v1
    kind: Service
    metadata:
      name: public-svc
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: public-app
    

Specificare l'indirizzo IP del servizio di bilanciamento del carico

Se si vuole usare un indirizzo IP specifico con il servizio di bilanciamento del carico, sono disponibili due opzioni per specificare l'indirizzo IP:

  • Impostare le annotazioni del servizio (scelta consigliata): usare service.beta.kubernetes.io/azure-pip-name per specificare una risorsa IP pubblica esistente in base al nome. Questa annotazione è l'opzione più efficiente e ti aiuta a evitare potenziali limitazioni della velocità. È anche possibile usare service.beta.kubernetes.io/azure-load-balancer-ipv4 per un indirizzo IPv4 e service.beta.kubernetes.io/azure-load-balancer-ipv6 per un indirizzo IPv6. Per i requisiti relativi alla risorsa IP pubblico, al gruppo di risorse e all'identità, vedere Usare un indirizzo IP pubblico statico con il bilanciatore del carico di AKS.
  • Aggiungere la proprietà LoadBalancerIP al manifesto YAML del servizio di bilanciamento del carico: aggiungere la Service.Spec.LoadBalancerIP proprietà al manifesto YAML del servizio di bilanciamento del carico. Questo campo è deprecato dopo Kubernetes upstream e non supporta dual stack. L'utilizzo corrente rimane invariato e si prevede che i servizi esistenti funzionino senza modifiche.

Distribuire il manifesto del servizio di bilanciamento del carico

  1. Distribuire il manifesto del servizio pubblico usando kubectl apply e specificare il nome del manifesto YAML.

    kubectl apply -f public-svc.yaml
    

    Azure Load Balancer è configurato con un nuovo indirizzo IP pubblico che precede il nuovo servizio. Poiché Azure Load Balancer può avere più indirizzi IP front-end, ogni nuovo servizio distribuito ottiene un nuovo indirizzo IP front-end dedicato a cui accedere in modo univoco.

  2. Verificare che il servizio sia stato creato e che il servizio di bilanciamento del carico sia configurato usando il kubectl get service comando .

    kubectl get service public-svc
    

    Quando si visualizzano i dettagli del servizio, l'indirizzo IP pubblico creato per questo servizio nel servizio di bilanciamento del carico viene visualizzato nella colonna EXTERNAL-IP dell'output. Potrebbero essere necessari alcuni minuti per passare dall'indirizzo IP <in sospeso> a un indirizzo IP pubblico effettivo. L'output di esempio seguente mostra la corretta creazione del servizio:

    NAMESPACE     NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)         AGE
    default       public-svc    LoadBalancer   10.0.39.110    203.0.113.187   80:32068/TCP    52s
    
  3. Per ottenere informazioni più dettagliate sul servizio, usare il kubectl describe service comando .

    kubectl describe service public-svc
    

    L'output di esempio seguente è una versione condensata dell'output dopo l'esecuzione di kubectl describe service. LoadBalancer Ingress mostra l'indirizzo IP esterno esposto dal servizio. IP mostra gli indirizzi interni.

    Name:                        public-svc
    Namespace:                   default
    Labels:                      <none>
    Annotations:                 <none>
    Selector:                    app=public-app
    ...
    IP:                          10.0.39.110
    ...
    LoadBalancer Ingress:        203.0.113.187
    ...
    TargetPort:                  80/TCP
    NodePort:                    32068/TCP
    ...
    Session Affinity:            None
    External Traffic Policy:     Cluster
    ...
    

Passo successivo