In entrata per i bilanciatori del carico delle applicazioni esterni


Questa pagina spiega come funziona Ingress per i bilanciatori del carico delle applicazioni esterni Google Kubernetes Engine (GKE). Scopri come configurare e utilizzare Ingress Bilanciamento del carico esterno.

Per informazioni generali sull'uso del bilanciamento del carico in GKE, consulta In entrata per bilanciatori del carico delle applicazioni esterni.

Il networking di Google Kubernetes Engine (GKE) si basa su Cloud Load Balancing. Con Cloud Load Balancing, un singolo indirizzo IP anycast consente il routing per determinare il percorso con il costo più basso al bilanciatore del carico Google Cloud più vicino.

Supporto per le funzionalità di Google Cloud

Puoi utilizzare BackendConfig per configurare un bilanciatore del carico delle applicazioni esterno per utilizzare le funzionalità come:

BackendConfig è una risorsa personalizzata che contiene le informazioni di configurazione funzionalità di Google Cloud. Per scoprire di più sulle funzionalità supportate, vedi Configurazione in entrata.

Supporto per WebSocket

Con i bilanciatori del carico delle applicazioni esterni, il protocollo WebSocket funziona senza configurazione.

Se intendi utilizzare il protocollo WebSocket, ti consigliamo di utilizzare un timeout maggiore dei 30 secondi predefiniti. Per il traffico WebSocket inviato tramite un Bilanciatore del carico delle applicazioni esterno di Google Cloud, il timeout del servizio di backend è interpretato come il periodo di tempo massimo in cui una connessione WebSocket può rimanere aperta, inattivo o meno.

Per impostare il valore di timeout per un backend: configurato tramite Ingress, crea un oggetto BackendConfig e utilizza beta.cloud.google.com/backend-config nel manifest del servizio.

Per informazioni di configurazione, consulta Timeout risposta backend.

Indirizzi IP statici per bilanciatori del carico HTTPS

Quando crei un oggetto Ingress, ottieni un indirizzo IP esterno stabile che che i client possono utilizzare per accedere ai tuoi servizi e, a loro volta, ai tuoi container in esecuzione. L'indirizzo IP è stabile, vale a dire che dura per l'intera durata del Oggetto Ingress. Se elimini la tua risorsa Ingress e ne crei una nuova dalla stesso file manifest, non è garantito che tu riceva lo stesso indirizzo IP esterno.

Se vuoi un indirizzo IP permanente che rimanga invariato durante l'eliminazione tuo traffico in entrata e ne crei uno nuovo, devi prenotare un indirizzo IP esterno statico. Quindi, nel manifest Ingress, includi un'annotazione che dia il nome del tuo un indirizzo IP statico riservato. Se modifichi una risorsa Ingress esistente per utilizzare un IP statico anziché un indirizzo IP temporaneo, GKE potrebbe modificare Indirizzo IP del bilanciatore del carico quando GKE ricrea la di una regola di forwarding del bilanciatore del carico.

Ad esempio, supponiamo che tu abbia prenotato un indirizzo IP esterno statico globale denominato my-static-address. Nel manifest Ingress, includi un Annotazione kubernetes.io/ingress.global-static-ip-name come mostrata qui:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: my-static-address

Configurazione di HTTPS (TLS) tra il client e il bilanciatore del carico

Un bilanciatore del carico HTTP(S) agisce da proxy tra i client e un'applicazione. Se vuoi accettare le richieste HTTPS dai tuoi client, il carico il bilanciatore deve avere un certificato per poter dimostrare la sua identità per i tuoi clienti. Il bilanciatore del carico deve inoltre disporre di una chiave privata per completare handshake HTTPS.

Quando il bilanciatore del carico accetta una richiesta HTTPS da un client, il traffico tra il client e il bilanciatore del carico è criptato tramite TLS. Tuttavia, il bilanciatore del carico termina la crittografia TLS e inoltra la richiesta senza la crittografia all'applicazione. Per informazioni su come criptare il traffico tra il bilanciatore del carico e l'applicazione, vedi HTTPS tra il bilanciatore del carico e l'applicazione.

Puoi utilizzare i certificati SSL gestiti da Google oppure che gestisci autonomamente. Per ulteriori informazioni sulla creazione di un Ingress che utilizza certificati gestiti da Google. Vedi Utilizzo di SSL gestito da Google certificati.

a fornire un bilanciatore del carico HTTP(S) con un certificato e una chiave che hai creato tu, crea un secret Kubernetes . Il secret contiene il certificato e la chiave. Aggiungi il secret Campo tls del file manifest Ingress, come nell'esempio seguente:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-2
spec:
  tls:
  - secretName: SECRET_NAME
  rules:
  - http:
      paths:
      - path: /*
        pathType: ImplementationSpecific
        backend:
          service:
            name: SERVICE_NAME
            port:
              number: 60000

Questo file manifest include i seguenti valori:

  • SECRET_NAME: il nome del secret che hai creato.
  • SERVICE_NAME: il nome del tuo servizio di backend.

Le modifiche ai secret vengono rilevate periodicamente, quindi se modifichi i dati all'interno del secret, l'applicazione delle modifiche richiederà al massimo 10 minuti al bilanciatore del carico.

Per ulteriori informazioni, consulta la sezione Utilizzo di più certificati SSL nel bilanciamento del carico HTTPS con In entrata.

Per proteggere il traffico Ingress con crittografia HTTPS per i tuoi cluster GKE, vedi un esempio Ingress sicuro.

Disabilitazione di HTTP

Se vuoi che tutto il traffico tra il client e il bilanciatore del carico HTTP(S) utilizzi HTTPS, puoi disattivare HTTP includendo kubernetes.io/ingress.allow-http nel tuo manifest Ingress. Imposta il valore dell'annotazione su "false".

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-2
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: SECRET_NAME
  ...

Questo file manifest include SECRET_NAME, ovvero il nome di il secret che hai creato.

Certificati precondivisi per bilanciatori del carico

In alternativa all'utilizzo dei secret di Kubernetes per fornire certificati ai bilanciatore del carico per la terminazione HTTP(S), puoi utilizzare i certificati caricate nel tuo progetto Google Cloud. Per ulteriori informazioni, vedi Utilizzare i certificati precondivisi e Utilizzo di più certificati SSL nel bilanciamento del carico HTTPS con Ingress.

HTTPS (TLS) tra il bilanciatore del carico e l'applicazione

Un bilanciatore del carico HTTP(S) agisce da proxy tra i client e un'applicazione. I client possono utilizzare HTTP o HTTPS per comunicare con il carico proxy bilanciatore del carico. La connessione dal proxy del bilanciatore del carico a la tua applicazione utilizza HTTP per impostazione predefinita. Tuttavia, se la tua applicazione, in esecuzione in GKE è in grado di ricevere richieste HTTPS, puoi configurare il bilanciatore del carico in modo che utilizzi HTTPS quando inoltra le richieste al tuo un'applicazione.

Per configurare il protocollo utilizzato tra il bilanciatore del carico e l'applicazione, usano l'annotazione cloud.google.com/app-protocols nel manifest del servizio. Questo manifest del servizio deve includere type: NodePort, a meno che non utilizzi bilanciamento del carico nativo del container. Se utilizzi il bilanciamento del carico nativo del container, utilizza type: ClusterIP.

Il seguente manifest del servizio specifica due porte. L'annotazione indica che quando un bilanciatore del carico HTTP(S) ha come target la porta 80 del servizio, deve utilizzare HTTP. Quando il bilanciatore del carico ha come target la porta 443 del servizio, deve utilizzano HTTPS.

Il manifest del servizio deve includere un valore name nell'annotazione della porta. Puoi modificare la porta del servizio solo facendo riferimento al name assegnato, non al suo Valore targetPort.

apiVersion: v1
kind: Service
metadata:
  name: my-service-3
  annotations:
    cloud.google.com/app-protocols: '{"my-https-port":"HTTPS","my-http-port":"HTTP"}'
spec:
  type: NodePort
  selector:
    app: metrics
    department: sales
  ports:
  - name: my-https-port
    port: 443
    targetPort: 8443
  - name: my-http-port
    port: 80
    targetPort: 50001

Passaggi successivi