web-dev-qa-db-fra.com

Attribuer une adresse IP externe à un service Kubernetes

EDIT: Tout l’intérêt de mon installation est d’atteindre (si possible) ce qui suit:

  • J'ai plusieurs noeuds k8s
  • Lorsque je contacte une adresse IP (du réseau de mon entreprise), elle doit être acheminée vers l'un de mes conteneurs/pod/service/autre.
  • Je devrais pouvoir configurer facilement cette adresse IP (comme dans ma définition de service .yml)

J'utilise un petit cluster Kubernetes (construit avec kubeadm) afin d'évaluer si je peux déplacer ma configuration de Docker (old) Swarm vers k8s. La fonctionnalité dont j'ai absolument besoin est la possibilité d'attribuer une adresse IP à des conteneurs, comme je le fais avec MacVlan.

Dans ma configuration actuelle de menu fixe, j'utilise MacVlan pour attribuer des adresses IP du réseau de mon entreprise à certains conteneurs afin que je puisse accéder directement (sans reverse proxy), comme s'il s'agissait d'un serveur physique. J'essaie de réaliser quelque chose de similaire avec les K8.

J'ai découvert que:

  • Je dois utiliser Service
  • Je ne peux pas utiliser le type LoadBalancer, car il ne concerne que les fournisseurs de cloud compatibles (comme GCE ou AWS).
  • Je devrais utiliser ExternalIPs
  • _ {Ingress Resources} _ sont une sorte de proxy inverse?

Mon fichier yaml est:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
      name: nginx-deployment
spec:
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
      nodeSelector:
        kubernetes.io/hostname: k8s-slave-3
---
kind: Service
apiVersion: v1
metadata:
  name: nginx-service
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
    - name: http
      protocol: TCP
      port: 80
      targetPort: 80
  externalIPs: 
    - A.B.C.D

J'espérais que mon service obtiendrait l'IP A.B.C.D (qui est l'un des réseaux de mon entreprise). Mon déploiement fonctionne car je peux atteindre mon conteneur nginx depuis l'intérieur du cluster k8s en utilisant ClusterIP.

Qu'est-ce que je rate ? Ou du moins, où puis-je trouver des informations sur le trafic de mon réseau afin de voir si des paquets arrivent?

MODIFIER :

$ kubectl get svc
NAME            CLUSTER-IP     EXTERNAL-IP       PORT(S)   AGE
kubernetes      10.96.0.1      <none>            443/TCP   6d
nginx-service   10.102.64.83   A.B.C.D           80/TCP    23h

Merci.

11
Jérôme Pin

Si ceci est juste pour tester, alors essayez

kubectl port-forward service/nginx-service 80:80

Ensuite vous pouvez

curl http://localhost:80
2
Chuk Lee

vous pouvez essayer la configuration de kube-keepalived-vip pour acheminer le trafic. https://github.com/kubernetes/contrib/tree/master/keepalived-vip

1
sfgroups

Vous pouvez essayer d'ajouter "type: NodePort" dans votre fichier yaml pour le service, puis vous aurez un port pour y accéder via le navigateur Web ou de l'extérieur. Pour mon cas, ça m'a aidé. 

0
Abu Shoeb