Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Offenlegen von Redis mit Ingress Nginx Controller

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