Redis werkt op 6379, een niet-HTTP-poort (80.443). U moet dus TCP/UDP-ondersteuning inschakelen in de nginx-ingangscontroller. De minikube-documenten hier laten zien hoe u dit voor redis kunt doen.
Update de configuratiekaarten van de TCP- en/of UDP-services
Gelet op de tutorial over het configureren van TCP- en UDP-services met de ingress nginx-controller, moeten we de configmap bewerken die standaard is geïnstalleerd bij het inschakelen van de minikube ingress-add-on.
Er zijn 2 configmaps, 1 voor TCP-services en 1 voor UDP-services. Standaard zien ze er zo uit:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
Aangezien deze configmaps gecentraliseerd zijn en configuraties kunnen bevatten, is het het beste als we ze alleen patchen in plaats van ze volledig te overschrijven.
Laten we deze redis-implementatie als voorbeeld gebruiken:
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
Maak een bestand redis-deployment.yaml
en plak de inhoud hierboven. Installeer vervolgens de redis-implementatie met de volgende opdracht:
kubectl apply -f redis-deployment.yaml
Vervolgens moeten we een service maken die verkeer naar onze pods kan leiden:
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
Maak een bestand redis-service.yaml
en plak de inhoud hierboven. Installeer vervolgens de redis-service met het volgende commando:
kubectl apply -f redis-service.yaml
Om een TCP-service aan de nginx ingress-controller toe te voegen, kun je de volgende opdracht uitvoeren:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
Waar:
6379
:de poort waarnaar uw service moet luisteren van buiten de virtuele minikube-machine
default
:de naamruimte waarin uw service is geïnstalleerd
redis-service
:de naam van de dienst
We kunnen controleren of onze bron is gepatcht met het volgende commando:
kubectl get configmap tcp-services -n kube-system -o yaml
We zouden zoiets als dit moeten zien:
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
De enige waarde die u hoeft te valideren, is dat er een waarde is onder de data-eigenschap die er als volgt uitziet:
"6379": default/redis-service:6379
Patch de ingress-nginx-controller
Er is nog een laatste stap die moet worden gedaan om connectiviteit van het externe cluster te verkrijgen. We moeten onze nginx-controller patchen zodat deze luistert op poort 6379 en verkeer naar uw service kan routeren. Om dit te doen, moeten we een patchbestand maken.
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379
Maak een bestand met de naam ingress-nginx-controller-patch.yaml
en plak de inhoud hierboven.
Pas vervolgens de wijzigingen toe met het volgende commando:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system