web-dev-qa-db-fra.com

Puis-je définir des ports personnalisés pour une entrée Kubernetes à écouter en plus de 80/443?

Je ne veux pas dire être en mesure d'acheminer vers un port spécifique, je veux dire réellement changer le port sur lequel l'entrée écoute.

Est-ce possible? Comment? Où est-ce documenté?

9

De la documentation kubernetes :

Une entrée n'expose pas de ports ou de protocoles arbitraires. L'exposition de services autres que HTTP et HTTPS à Internet utilise généralement un service de type Service.Type = NodePort ou Service.Type = LoadBalancer.

Il peut être possible de personnaliser un LoadBalancer sur un fournisseur de cloud comme AWS pour écouter sur d'autres ports.

8
dlaidlaw

Je suppose que vous utilisez NGINX Ingress Controller . Dans ce cas, lors de l'installation, au lieu de faire un kubectl apply dans le yaml officiel comme en voici un , vous pouvez essayer de télécharger le yaml et de changer le port. Le fichier ci-dessus, qui est utilisé pour un ELB AWS L4, deviendrait comme ceci:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - port: {custom port 1}
      targetPort: http
    - port: {custom port 2}
      targetPort: https

Une alternative consiste à utiliser un contrôleur d'entrée plus puissant. Voici une liste de différents contrôleurs. Mon choix personnel est Ambassadeur . Si vous suivez la page de démarrage, il vous suffit de modifier la définition de service pour le port de votre choix:

---
apiVersion: v1
kind: Service
metadata:
  name: ambassador
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
   - port: {custom port}
     targetPort: 8080
  selector:
    service: ambassador
5
victortv

Une définition Ingress est soutenue par un contrôleur d'entrée . Le contrôleur d'entrée est déployé avec des objets Kubernetes normaux, donc aura un Service associé à son déploiement qui expose le contrôleur d'entrée. Le mode de déploiement de ce service est spécifique à chaque type de contrôleur d'entrée et également à la méthode de déploiement que vous utilisez.

Par exemple, un déploiement cloud générique de kubernetes/ingress-nginx déploiera un service de type LoadBalancer:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https

Pour modifier les ports avec lesquels l'équilibreur de charge est configuré, changez le spec.ports[*].port valeurs à ce dont vous avez besoin.

1
Matt