Redis
 sql >> Database >  >> NoSQL >> Redis

Esporre Redis con Ingress Nginx Controller

Redis funziona su 6379 che non è una porta HTTP (80,443). Quindi è necessario abilitare il supporto TCP/UDP nel controller di ingresso nginx. I documenti di minikube qui mostrano come farlo per redis.

Aggiorna le mappe di configurazione dei servizi TCP e/o UDP

Prendendo in prestito dal tutorial sulla configurazione dei servizi TCP e UDP con il controller ingress nginx, dovremo modificare la configmap che è installata per impostazione predefinita quando si abilita l'addon di ingresso minikube.

Sono disponibili 2 mappe di configurazione, 1 per i servizi TCP e 1 per i servizi UDP. Per impostazione predefinita hanno questo aspetto:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: udp-services
  namespace: ingress-nginx

Poiché queste mappe di configurazione sono centralizzate e possono contenere configurazioni, è meglio se le patchiamo solo piuttosto che sovrascriverle completamente.

Usiamo questa distribuzione redis come esempio:

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

Crea un file redis-deployment.yaml e incolla il contenuto sopra. Quindi installa la distribuzione redis con il seguente comando:

kubectl apply -f redis-deployment.yaml

Quindi dobbiamo creare un servizio in grado di indirizzare il traffico ai nostri pod:

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

Crea un file redis-service.yaml e incolla il contenuto sopra. Quindi installa il servizio redis con il seguente comando:

kubectl apply -f redis-service.yaml

Per aggiungere un servizio TCP al controller di ingresso nginx puoi eseguire il comando seguente:

kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'

Dove:

6379 :la porta che il tuo servizio dovrebbe ascoltare dall'esterno della macchina virtuale minikube

default :lo spazio dei nomi in cui è installato il tuo servizio

redis-service :il nome del servizio

Possiamo verificare che la nostra risorsa sia stata corretta con il seguente comando:

kubectl get configmap tcp-services -n kube-system -o yaml

Dovremmo vedere qualcosa del genere:

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

L'unico valore che devi convalidare è che c'è un valore sotto la proprietà dei dati che assomiglia a questo:

"6379": default/redis-service:6379

Applica una patch al controller ingress-nginx

È necessario eseguire un ultimo passaggio per ottenere la connettività dal cluster esterno. Dobbiamo applicare una patch al nostro controller nginx in modo che sia in ascolto sulla porta 6379 e possa instradare il traffico al tuo servizio. Per fare ciò abbiamo bisogno di creare un file di patch.

spec:
  template:
    spec:
      containers:
      - name: ingress-nginx-controller
        ports:
         - containerPort: 6379
           hostPort: 6379

Crea un file chiamato ingress-nginx-controller-patch.yaml e incolla il contenuto sopra.

Quindi applica le modifiche con il seguente comando:

kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system