Redis fungerar på 6379 som inte är HTTP-port(80,443). Så du måste aktivera TCP/UDP-stöd i nginx ingress controller. Minikube-dokumenten här visar hur man gör det för redis.
Uppdatera TCP- och/eller UDP-tjänsternas konfigurationskartor
När vi lånar från handledningen om att konfigurera TCP- och UDP-tjänster med ingress nginx-kontrollern måste vi redigera configmap som är installerad som standard när vi aktiverar minikube ingress-tillägget.
Det finns 2 configmaps, 1 för TCP-tjänster och 1 för UDP-tjänster. Som standard ser de ut så här:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
Eftersom dessa konfigurationskartor är centraliserade och kan innehålla konfigurationer är det bäst om vi bara korrigerar dem istället för att helt skriva över dem.
Låt oss använda denna omdistribuering som ett exempel:
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
Skapa en fil redis-deployment.yaml
och klistra in innehållet ovan. Installera sedan redis-distributionen med följande kommando:
kubectl apply -f redis-deployment.yaml
Därefter måste vi skapa en tjänst som kan dirigera trafik till våra 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
Skapa en fil redis-service.yaml
och klistra in innehållet ovan. Installera sedan redis-tjänsten med följande kommando:
kubectl apply -f redis-service.yaml
För att lägga till en TCP-tjänst till nginx ingress-kontrollern kan du köra följande kommando:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
Var:
6379
:porten som din tjänst ska lyssna på utanför den virtuella minikube-maskinen
default
:namnområdet som din tjänst är installerad i
redis-service
:namnet på tjänsten
Vi kan verifiera att vår resurs har patchats med följande kommando:
kubectl get configmap tcp-services -n kube-system -o yaml
Vi borde se något sånt här:
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
Det enda värdet du behöver validera är att det finns ett värde under dataegenskapen som ser ut så här:
"6379": default/redis-service:6379
Packa på ingress-nginx-kontrollern
Det finns ett sista steg som måste göras för att erhålla anslutning från det yttre klustret. Vi behöver patcha vår nginx-kontroller så att den lyssnar på port 6379 och kan dirigera trafik till din tjänst. För att göra detta måste vi skapa en patchfil.
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379
Skapa en fil som heter ingress-nginx-controller-patch.yaml
och klistra in innehållet ovan.
Tillämpa sedan ändringarna med följande kommando:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system