Redis fonctionne sur 6379 qui n'est pas un port HTTP (80 443). Vous devez donc activer la prise en charge TCP/UDP dans le contrôleur d'entrée nginx. La documentation minikube ici montre comment le faire pour redis.
Mettre à jour les mappages de configuration des services TCP et/ou UDP
En empruntant le tutoriel sur la configuration des services TCP et UDP avec le contrôleur nginx ingress, nous devrons modifier le configmap qui est installé par défaut lors de l'activation de l'addon minikube ingress.
Il existe 2 configmaps, 1 pour les services TCP et 1 pour les services UDP. Par défaut, ils ressemblent à ceci :
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
Étant donné que ces configmaps sont centralisés et peuvent contenir des configurations, il est préférable de ne les corriger que de les écraser complètement.
Prenons ce déploiement Redis comme exemple :
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deployment
namespace: default
labels:
app: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- image: redis
imagePullPolicy: Always
name: redis
ports:
- containerPort: 6379
protocol: TCP
Créez un fichier redis-deployment.yaml
et collez le contenu ci-dessus. Installez ensuite le déploiement redis avec la commande suivante :
kubectl apply -f redis-deployment.yaml
Ensuite, nous devons créer un service capable d'acheminer le trafic vers nos pods :
apiVersion: v1
kind: Service
metadata:
name: redis-service
namespace: default
spec:
selector:
app: redis
type: ClusterIP
ports:
- name: tcp-port
port: 6379
targetPort: 6379
protocol: TCP
Créer un fichier redis-service.yaml
et collez le contenu ci-dessus. Installez ensuite le service redis avec la commande suivante :
kubectl apply -f redis-service.yaml
Pour ajouter un service TCP au contrôleur d'entrée nginx, vous pouvez exécuter la commande suivante :
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
Où :
6379
:le port que votre service doit écouter depuis l'extérieur de la machine virtuelle minikube
default
:l'espace de noms dans lequel votre service est installé
redis-service
:le nom du service
Nous pouvons vérifier que notre ressource a été patchée avec la commande suivante :
kubectl get configmap tcp-services -n kube-system -o yaml
Nous devrions voir quelque chose comme ceci :
apiVersion: v1
data:
"6379": default/redis-service:6379
kind: ConfigMap
metadata:
creationTimestamp: "2019-10-01T16:19:57Z"
labels:
addonmanager.kubernetes.io/mode: EnsureExists
name: tcp-services
namespace: kube-system
resourceVersion: "2857"
selfLink: /api/v1/namespaces/kube-system/configmaps/tcp-services
uid: 4f7fac22-e467-11e9-b543-080027057910
La seule valeur que vous devez valider est qu'il existe une valeur sous la propriété data qui ressemble à ceci :
"6379": default/redis-service:6379
Corriger le contrôleur ingress-nginx
Il reste une dernière étape à effectuer pour obtenir la connectivité du cluster extérieur. Nous devons patcher notre contrôleur nginx pour qu'il écoute sur le port 6379 et puisse acheminer le trafic vers votre service. Pour ce faire, nous devons créer un fichier de correctif.
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379
Créez un fichier appelé ingress-nginx-controller-patch.yaml
et collez le contenu ci-dessus.
Appliquez ensuite les modifications avec la commande suivante :
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system