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é?
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.
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
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.