По сути, у меня есть Deployment, который создает 3 контейнера, которые автоматически масштабируются: PHP-FPM, NGINX и контейнер, содержащий приложение, все из которых настроены с использованием секретов, сервисов и доступа. Приложение также совместно использует проект между PHP-FPM и NGINX, поэтому все настроено.
Поскольку я хочу больше узнать о K8s, я решил создать модуль с Redis, который также монтирует постоянный диск (но это не важно). Я также создал службу для Redis и все прекрасно работает, если я SSH в контейнере Redis и запустить redis-cli
.
Самое интересное, что проект не может подключиться к модулю, на котором включен Redis. Я понимаю, что контейнеры между модулями находятся в одной и той же "локальной" сети, и к ним можно получить доступ, используя localhost
.
Как мне подключить мой проект к серверу redis, работающему в другом модуле, который масштабируется независимо? Что не так с сервисом Redis?
Мой сервис Redis такой:
apiVersion: v1
kind: Service
metadata:
name: redis-service
spec:
ports:
- port: 6379
targetPort: 6379
selector:
app: redis
Мой модуль Redis работает от файла конфигурации развертывания (я не обязательно масштабирую его, но я буду ожидать его):
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
strategy:
type: Recreate
template:
metadata:
labels:
app: redis
spec:
volumes:
- name: redis-persistent-volume
persistentVolumeClaim:
claimName: redis-pvc
containers:
- image: redis:4.0.11
command: ['redis-server']
name: redis
imagePullPolicy: Always
resources:
limits:
cpu: 250m
memory: 512Mi
requests:
cpu: 250m
memory: 512Mi
ports:
- containerPort: 6379
name: redis
volumeMounts:
- name: redis-persistent-volume
mountPath: /data
Кроме того, когда я подключаюсь к kubectl get service
, сервер Redis имеет IP-адрес кластера:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 21h
nginx-service NodePort 10.100.111.16 <none> 80:30312/TCP 21h
redis-service ClusterIP 10.99.80.141 <none> 6379/TCP 6s