sql >> Base de Datos >  >> NoSQL >> Redis

Exponiendo Redis con el controlador Ingress Nginx

Redis funciona en 6379, que no es un puerto HTTP (80,443). Por lo tanto, debe habilitar la compatibilidad con TCP/UDP en el controlador de ingreso nginx. Los documentos de minikube aquí muestran cómo hacerlo para redis.

Actualizar los mapas de configuración de los servicios TCP y/o UDP

Tomando prestado del tutorial sobre la configuración de los servicios TCP y UDP con el controlador nginx de ingreso, necesitaremos editar el mapa de configuración que se instala de forma predeterminada al habilitar el complemento de ingreso de minikube.

Hay 2 mapas de configuración, 1 para servicios TCP y 1 para servicios UDP. Por defecto se ven así:

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

Dado que estos mapas de configuración están centralizados y pueden contener configuraciones, es mejor si solo los parcheamos en lugar de sobrescribirlos por completo.

Usemos esta implementación de Redis como ejemplo:

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

Cree un archivo redis-deployment.yaml y pegue el contenido de arriba. Luego instale la implementación de redis con el siguiente comando:

kubectl apply -f redis-deployment.yaml

A continuación, debemos crear un servicio que pueda enrutar el tráfico a nuestros 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

Crea un archivo redis-service.yaml y pegue el contenido de arriba. Luego instale el servicio redis con el siguiente comando:

kubectl apply -f redis-service.yaml

Para agregar un servicio TCP al controlador de entrada nginx, puede ejecutar el siguiente comando:

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

donde:

6379 :el puerto que debe escuchar su servicio desde fuera de la máquina virtual minikube

default :el espacio de nombres en el que está instalado su servicio

redis-service :el nombre del servicio

Podemos verificar que nuestro recurso fue parcheado con el siguiente comando:

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

Deberíamos ver algo como esto:

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

El único valor que necesita validar es que hay un valor debajo de la propiedad de datos que se ve así:

"6379": default/redis-service:6379

Parchear el controlador de entrada-nginx

Hay un paso final que se debe realizar para obtener conectividad desde el clúster externo. Necesitamos parchear nuestro controlador nginx para que escuche en el puerto 6379 y pueda enrutar el tráfico a su servicio. Para hacer esto necesitamos crear un archivo de parche.

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

Crea un archivo llamado ingress-nginx-controller-patch.yaml y pega el contenido arriba.

A continuación, aplique los cambios con el siguiente comando:

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