Redis funguje na 6379, což není port HTTP (80 443). Musíte tedy povolit podporu TCP/UDP v řadiči vstupu nginx. Dokumenty minikube zde ukazují, jak to udělat pro redis.
Aktualizujte konfigurační mapy služeb TCP a/nebo UDP
Když jsme si vypůjčili z tutoriálu o konfiguraci služeb TCP a UDP pomocí řadiče ingress nginx, budeme muset upravit konfigurační mapu, která se instaluje ve výchozím nastavení při povolení doplňku minikube ingress.
Existují 2 konfigurační mapy, 1 pro služby TCP a 1 pro služby UDP. Ve výchozím nastavení vypadají takto:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
Vzhledem k tomu, že tyto konfigurační mapy jsou centralizované a mohou obsahovat konfigurace, je nejlepší, když je pouze opravíme, než abychom je úplně přepsali.
Použijme toto nasazení redis jako příklad:
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
Vytvořte soubor redis-deployment.yaml
a vložte obsah výše. Poté nainstalujte nasazení redis pomocí následujícího příkazu:
kubectl apply -f redis-deployment.yaml
Dále musíme vytvořit službu, která dokáže směrovat provoz do našich modulů:
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
Vytvořte soubor redis-service.yaml
a vložte obsah výše. Poté nainstalujte službu redis pomocí následujícího příkazu:
kubectl apply -f redis-service.yaml
Chcete-li přidat službu TCP do řadiče vstupu nginx, můžete spustit následující příkaz:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
Kde:
6379
:port, na kterém by vaše služba měla naslouchat mimo virtuální počítač minikube
default
:jmenný prostor, ve kterém je vaše služba nainstalována
redis-service
:název služby
Můžeme ověřit, že náš prostředek byl opraven pomocí následujícího příkazu:
kubectl get configmap tcp-services -n kube-system -o yaml
Měli bychom vidět něco takového:
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
Jediná hodnota, kterou potřebujete ověřit, je, že pod vlastností data je hodnota, která vypadá takto:
"6379": default/redis-service:6379
Opravte ovladač ingress-nginx-controller
Aby bylo možné získat konektivitu z vnějšího klastru, je třeba provést jeden poslední krok. Potřebujeme opravit náš řadič nginx, aby naslouchal na portu 6379 a mohl směrovat provoz do vaší služby. K tomu potřebujeme vytvořit záplatový soubor.
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379
Vytvořte soubor s názvem ingress-nginx-controller-patch.yaml
a vložte obsah výše.
Poté použijte změny pomocí následujícího příkazu:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system