Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Expondo o Redis com o Ingress Nginx Controller


O Redis funciona em 6379, que não é uma porta HTTP (80.443). Então você precisa habilitar o suporte TCP/UDP no controlador de ingresso nginx. Os documentos do minikube aqui mostram como fazer isso para redis.

Atualize os mapas de configuração dos serviços TCP e/ou UDP

Tomando emprestado do tutorial sobre como configurar serviços TCP e UDP com o controlador nginx de ingresso, precisaremos editar o configmap que é instalado por padrão ao ativar o complemento de ingresso minikube.

Existem 2 configmaps, 1 para serviços TCP e 1 para serviços UDP. Por padrão, eles se parecem com isso:
apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: udp-services
  namespace: ingress-nginx

Como esses configmaps são centralizados e podem conter configurações, é melhor apenas corrigi-los em vez de substituí-los completamente.

Vamos usar esta implantação do redis como exemplo:
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

Crie um arquivo redis-deployment.yaml e cole o conteúdo acima. Em seguida, instale a implantação do redis com o seguinte comando:
kubectl apply -f redis-deployment.yaml

Em seguida, precisamos criar um serviço que possa rotear o tráfego para nossos 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

Crie um arquivo redis-service.yaml e cole o conteúdo acima. Em seguida, instale o serviço redis com o seguinte comando:
kubectl apply -f redis-service.yaml

Para adicionar um serviço TCP ao controlador de ingresso nginx, você pode executar o seguinte comando:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'

Onde:

6379 :a porta que seu serviço deve escutar de fora da máquina virtual minikube

default :o namespace em que seu serviço está instalado

redis-service :o nome do serviço

Podemos verificar se nosso recurso foi corrigido com o seguinte comando:
kubectl get configmap tcp-services -n kube-system -o yaml

Devemos ver algo assim:
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

O único valor que você precisa validar é que há um valor na propriedade data que se parece com isso:
"6379": default/redis-service:6379

Corrigir o controlador-nginx de entrada

Há uma etapa final que deve ser feita para obter conectividade do cluster externo. Precisamos corrigir nosso controlador nginx para que ele esteja escutando na porta 6379 e possa rotear o tráfego para seu serviço. Para fazer isso, precisamos criar um arquivo de patch.
spec:
  template:
    spec:
      containers:
      - name: ingress-nginx-controller
        ports:
         - containerPort: 6379
           hostPort: 6379

Crie um arquivo chamado ingress-nginx-controller-patch.yaml e cole o conteúdo acima.

Em seguida, aplique as alterações com o seguinte comando:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system