Come scegliere l'indirizzo IP esterno di un bilanciamento del carico di Kubernetes in Google Kubernetes Engine


16

Sto distribuendo un'app Web utilizzando Google Kubernetes Engine e voglio renderla accessibile tramite un bilanciamento del carico su un indirizzo IP statico esistente che controllo come parte dello stesso progetto in Google Cloud Platform, perché il nome di dominio che voglio usare punta già a questo IP.

Il file yaml che ho usato per il pod è:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: gcr.io/my-project/my-app:latest

Posso impostare un bilanciamento del carico usando:

apiVersion: v1
kind: Service
metadata:
  name: my-load-balancer
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: my-app
  type: LoadBalancer

Questo fornisce un IP esterno su cui l'app è accessibile, ma non riesco a trovare alcun modo per configurarlo per utilizzare l'IP che desidero. La documentazione relativa ai servizi menziona un'impostazione spec.clusterIP, ma ciò non sembra correlare all'IP esterno. Allo stesso modo, una volta impostato il bilanciamento del carico, il campo status.loadBalancer.ingress.ip del servizio è impostato sul suo indirizzo IP esterno, ma questa non sembra essere un'impostazione configurabile.

In alternativa, ho provato a creare manualmente una regola di inoltro nella console di Google Compute Engine per indirizzare il traffico dal mio indirizzo IP statico al pool di destinazione impostato da Kubernetes, ma quando provo a connettermi la connessione viene rifiutata.

Esiste un modo per fare quello che voglio: esporre un pod Kubernetes (o controller di replica) sul motore di Google Kubernetes su un indirizzo IP statico scelto?

Risposte:


9

TL; DR Google Container Engine che esegue Kubernetes v1.1 supporta loadBalancerIPsemplicemente la marcatura dell'IP assegnato automaticamente come statico per primo.

Kubernetes v1.1 supporta IP esterni :

apiVersion: v1
kind: Service
spec:
  type: LoadBalancer
  loadBalancerIP: 10.10.10.10
  ...

Finora non esiste una buona documentazione coerente su come usarlo su GCE. Quello che è certo è che questo IP deve prima essere uno dei tuoi IP statici pre-allocati .

La documentazione di bilanciamento del carico tra regioni è principalmente per Compute Engine e non Kubernetes / Container Engine, ma è comunque utile soprattutto la parte "Configura il servizio di bilanciamento del carico".

Se crei semplicemente un LoadBalancer Kubernetes su GCE, creerà un motore di calcolo di rete> Rete> Bilanciamento carico di rete> Regola di inoltro che punta a un pool di destinazione composto dalle tue macchine sul tuo cluster (normalmente solo quelli che eseguono i Pod corrispondenti al selettore di servizio) . Sembra che eliminare uno spazio dei nomi non ripulisca bene le regole create.


Aggiornare

In realtà è ora supportato (anche se sotto documentato):

  1. Verifica di eseguire Kubernetes 1.1 o versioni successive (in GKE modifica il cluster e seleziona "Versione nodo")
  2. In Rete> Indirizzi IP esterni dovresti già avere alcuni effimeri contrassegnati come puntati all'istanza della VM del cluster (in caso contrario o non essere sicuri, distribuire una volta senza loadBalancerIP, attendere fino a quando non si è assegnato un IP esterno durante l'esecuzione kubectl get svce cercare quell'IP nella elenco in quella pagina). Mark uno di loro come statica , diciamo che Indirizzo esterno è 10.10.10.10.
  3. Modifica LoadBalancer in modo che sia loadBalancerIP=10.10.10.10come sopra (adatta all'IP che ti è stato fornito da Google).

Ora se elimini LoadBalancer o anche il tuo spazio dei nomi, dovrebbe preservare quell'indirizzo IP quando lo rispedirai su quel cluster. Se è necessario modificare il cluster, dovrebbe essere possibile un po 'di manipolazione manuale:

  1. Nella sezione "Bilanciamento carico di rete", scheda "Pool di destinazione" , fai clic sul pulsante "Crea pool di destinazione":
    • Nome: cluster-pool(o qualsiasi altro nome)
    • Regione: selezionare la regione di uno dei cluster
    • Health Check: facoltativo, se lo desideri
    • Seleziona gruppi di istanze esistenti: il tuo cluster Kubernetes
  2. Nella sezione "Bilanciamento carico di rete", scheda "Regole di inoltro" , fai clic sul pulsante "Crea regola di inoltro":
    • Nome: http-cross-region-gfr(o qualsiasi altro nome)
    • Regione: selezionare la regione di uno dei cluster
    • IP esterno: seleziona loadbalancer-ip-crossregionquello appena prenotato
    • Pool di destinatari: seleziona cluster-poolappena creato

Quelli sono ancora rilevanti?
Ben

8

Buone notizie. Questo problema verrà risolto in Kubernetes v1.1. Puoi impostare il service.spec.loadBalancerIPcampo su un IP che sai di possedere.


Precedente:

Questa è una caratteristica che è caduta attraverso le crepe. Doveva funzionare (e potrebbe anche aver funzionato ad un certo punto), ma non è stato ben testato e si è rotto durante il percorso e quindi è stato accidentalmente progettato (temporaneamente).

È nella mia lista di cose da sistemare dopo la 1.0.

https://github.com/GoogleCloudPlatform/kubernetes/issues/10323


Questo dovrebbe probabilmente essere un commento, non una risposta.
Reparto - Ripristina Monica

5
@Ward: "Non è possibile" dallo sviluppatore è una risposta, IMHO, ed è stato accettato come tale.
Sven
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.