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