Redis работи на 6379, който не е HTTP порт (80,443). Така че трябва да активирате поддръжката на TCP/UDP във входния контролер на nginx. Документите на minikube тук показват как да го направите за redis.
Актуализирайте конфигурационните карти на TCP и/или UDP услуги
Взаимствайки от урока за конфигуриране на TCP и UDP услуги с входящия контролер nginx, ще трябва да редактираме конфигурационната карта, която е инсталирана по подразбиране, когато активираме миникубе добавката за вход.
Има 2 конфигурационни карти, 1 за TCP услуги и 1 за UDP услуги. По подразбиране те изглеждат така:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
---
apiVersion: v1
kind: ConfigMap
metadata:
name: udp-services
namespace: ingress-nginx
Тъй като тези конфигурационни карти са централизирани и може да съдържат конфигурации, най-добре е само да ги поправим, вместо да ги презапишем напълно.
Нека използваме това повторно разгръщане като пример:
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
Създайте файл redis-deployment.yaml
и поставете съдържанието по-горе. След това инсталирайте разгръщането на redis със следната команда:
kubectl apply -f redis-deployment.yaml
След това трябва да създадем услуга, която може да насочва трафика към нашите модули:
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
Създайте файл redis-service.yaml
и поставете съдържанието по-горе. След това инсталирайте услугата redis със следната команда:
kubectl apply -f redis-service.yaml
За да добавите TCP услуга към входния контролер на nginx, можете да изпълните следната команда:
kubectl patch configmap tcp-services -n kube-system --patch '{"data":{"6379":"default/redis-service:6379"}}'
Къде:
6379
:портът, който вашата услуга трябва да слуша извън виртуалната машина minikube
default
:пространството от имена, в което е инсталирана вашата услуга
redis-service
:името на услугата
Можем да проверим дали ресурсът ни е закърпен със следната команда:
kubectl get configmap tcp-services -n kube-system -o yaml
Трябва да видим нещо подобно:
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
Единствената стойност, която трябва да потвърдите, е, че има стойност под свойството данни, която изглежда така:
"6379": default/redis-service:6379
Поправка на ingress-nginx-контролера
Има една последна стъпка, която трябва да се направи, за да се получи свързаност от външния клъстер. Трябва да закърпим нашия nginx контролер, така че той да слуша на порт 6379 и да може да насочва трафика към вашата услуга. За да направим това, трябва да създадем файл с корекция.
spec:
template:
spec:
containers:
- name: ingress-nginx-controller
ports:
- containerPort: 6379
hostPort: 6379
Създайте файл, наречен ingress-nginx-controller-patch.yaml
и поставете съдържанието по-горе.
След това приложете промените със следната команда:
kubectl patch deployment ingress-nginx-controller --patch "$(cat ingress-nginx-controller-patch.yaml)" -n kube-system