Redis funktioniert auf 6379, was kein HTTP-Port (80.443) ist. Sie müssen also die TCP/UDP-Unterstützung im Nginx Ingress Controller aktivieren. Die Minikube-Dokumentation hier zeigt, wie man es für Redis macht.
Aktualisieren Sie die Konfigurationszuordnungen der TCP- und/oder UDP-Dienste
In Anlehnung an das Tutorial zum Konfigurieren von TCP- und UDP-Diensten mit dem Ingress-nginx-Controller müssen wir die Configmap bearbeiten, die standardmäßig installiert wird, wenn das Minikube-Ingress-Addon aktiviert wird.
Es gibt 2 Configmaps, 1 für TCP-Dienste und 1 für UDP-Dienste. Standardmäßig sehen sie so aus:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
Da diese Configmaps zentralisiert sind und Konfigurationen enthalten können, ist es am besten, wenn wir sie nur patchen, anstatt sie vollständig zu überschreiben.
Nehmen wir diese Redis-Bereitstellung als Beispiel:
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
Erstellen Sie eine Datei redis-deployment.yaml
und fügen Sie den Inhalt oben ein. Installieren Sie dann die Redis-Bereitstellung mit dem folgenden Befehl:
kubectl apply -f redis-deployment.yaml
Als Nächstes müssen wir einen Dienst erstellen, der Datenverkehr an unsere Pods weiterleiten kann:
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
Erstellen Sie eine Datei redis-service.yaml
und fügen Sie den Inhalt oben ein. Installieren Sie dann den Redis-Dienst mit dem folgenden Befehl:
kubectl apply -f redis-service.yaml
Um einen TCP-Dienst zum nginx-Ingress-Controller hinzuzufügen, können Sie den folgenden Befehl ausführen:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
Wo:
6379
:Der Port, auf den Ihr Dienst von außerhalb der virtuellen Minikube-Maschine hören soll
default
:der Namespace, in dem Ihr Dienst installiert ist
redis-service
:der Name des Dienstes
Mit dem folgenden Befehl können wir überprüfen, ob unsere Ressource gepatcht wurde:
kubectl get configmap tcp-services -n kube-system -o yaml
Wir sollten so etwas sehen:
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
Der einzige Wert, den Sie überprüfen müssen, ist, dass es einen Wert unter der Dateneigenschaft gibt, der wie folgt aussieht:
"6379": default/redis-service:6379
Patch the ingress-nginx-controller
Es gibt einen letzten Schritt, der getan werden muss, um Konnektivität von dem externen Cluster zu erhalten. Wir müssen unseren Nginx-Controller so patchen, dass er auf Port 6379 lauscht und den Datenverkehr an Ihren Dienst weiterleiten kann. Dazu müssen wir eine Patch-Datei erstellen.
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379
Erstellen Sie eine Datei namens ingress-nginx-controller-patch.yaml
und fügen Sie den Inhalt oben ein.
Als nächstes wenden Sie die Änderungen mit dem folgenden Befehl an:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system