Je déploie une application Web à l'aide de Google Kubernetes Engine et je souhaite la rendre accessible via un équilibreur de charge sur une adresse IP statique existante que je contrôle dans le cadre du même projet dans Google Cloud Platform, car le nom de domaine que je souhaite utiliser pointe déjà vers cette adresse IP.
Le fichier yaml que j'ai utilisé pour le pod est:
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
Je peux configurer un équilibreur de charge en utilisant:
apiVersion: v1
kind: Service
metadata:
name: my-load-balancer
spec:
ports:
- port: 80
targetPort: 80
selector:
app: my-app
type: LoadBalancer
Cela fournit une IP externe sur laquelle l'application est accessible, mais je ne trouve aucun moyen de la configurer pour utiliser l'IP que je veux. Le documentation des services mentionne un paramètre spec.clusterIP, mais cela ne semble pas se rapporter à l'IP externe. De même, une fois l'équilibreur de charge configuré, le champ status.loadBalancer.ingress.ip du service est défini sur son adresse IP externe, mais cela ne semble pas être un paramètre configurable.
Comme alternative, j'ai essayé de créer manuellement une règle de transfert dans la console Google Compute Engine pour diriger le trafic de mon adresse IP statique vers le pool cible configuré par Kubernetes, mais lorsque j'essaie de me connecter, la connexion est refusée.
Existe-t-il un moyen de faire ce que je veux - d'exposer un pod Kubernetes (ou un contrôleur de réplication) sur le moteur Google Kubernetes sur une adresse IP statique choisie?
TL; DR Google Container Engine exécutant Kubernetes v1.1 prend en charge loadBalancerIP
marquez simplement l'IP attribuée automatiquement comme statique en premier.
Kubernetes v1.1 prend en charge externalIPs :
apiVersion: v1
kind: Service
spec:
type: LoadBalancer
loadBalancerIP: 10.10.10.10
...
Jusqu'à présent, il n'y a pas vraiment de bonne documentation cohérente sur la façon de l'utiliser sur GCE. Ce qui est sûr, c'est que cette IP doit d'abord être l'une de vos IP statiques préétablies .
La documentation équilibrage de charge entre régions concerne principalement Compute Engine et non Kubernetes/Container Engine, mais elle est toujours utile, en particulier la partie "Configurer le service d'équilibrage de charge".
Si vous venez de créer un Kubernetes LoadBalancer sur GCE, il créera un réseau Compute Engine> Réseau> Équilibrage de la charge réseau> Règle de transfert pointant vers un pool cible composé de vos machines sur votre cluster (normalement uniquement celles qui exécutent les pods correspondant au sélecteur de service) . Il semble que la suppression d'un espace de noms ne nettoie pas bien les règles créées.
Il est actuellement pris en charge (même s'il est sous-documenté):
loadBalancerIP
, attendez qu'une IP externe soit allouée lorsque vous exécutez kubectl get svc
, et recherchez cette adresse IP dans la liste de cette page). Marquez l'un d'eux comme statique , disons-le Adresse externe est 10.10.10.10
.loadBalancerIP=10.10.10.10
comme ci-dessus (adaptez-vous à l'adresse IP qui vous a été donnée par Google).Maintenant, si vous supprimez votre LoadBalancer ou même votre espace de noms, il doit conserver cette adresse IP lors du re-rechargement sur ce cluster. Si vous devez modifier le cluster, certains manipulations manuelles devraient être possibles:
cluster-pool
(ou tout autre nom)http-cross-region-gfr
(ou tout autre nom)loadbalancer-ip-crossregion
vous venez de réservercluster-pool
vous venez de créerBonnes nouvelles. Cela sera corrigé dans Kubernetes v1.1. Vous pouvez définir le service.spec.loadBalancerIP
champ vers une adresse IP que vous connaissez.
Précédent:
C'est une caractéristique qui est tombée à travers les mailles du filet. Il était censé fonctionner (et pourrait même avoir fonctionné à un moment donné), mais n'a pas été bien testé et s'est cassé en cours de route, puis a été conçu accidentellement (temporairement).
C'est sur ma liste restreinte pour les choses à corriger après 1.0.
https://github.com/GoogleCloudPlatform/kubernetes/issues/1032