#kubernetes #networking
Вопрос:
Я познакомился с кубернетесом совсем недавно. Я хочу развернуть проект в своем кластере мини-кубов. Вот файл yaml:
развертывание.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: project
name: project
namespace: default
spec:
replicas: 1
selector:
matchLabels:
run: project
template:
metadata:
labels:
run: project
spec:
hostNetwork: true
containers:
- name: container1
image: image1
imagePullPolicy: Never
- name: container2
image: image2
imagePullPolicy: Never
Я успешно создал развертывание, и оба контейнера в модуле запущены и запущены, но эти контейнеры не могут подключаться к локальным ресурсам, таким как базы данных(например, redis).
Я получаю журналы с помощью этой команды, и повторное использование, как показано ниже.
журналы kubectl-проект f-5f5c6df6bc-контейнер q82s511
Ошибка 111 при подключении к 127.0.0.1:6379. Соединение отказало.
Комментарии:
1. Я бы отдельно развернул Redis и другие ваши зависимости внутри Kubernetes (возможно, используя предварительно созданную диаграмму управления). Вам также необходимо включить
env:
настройки, чтобы сообщить приложению, где на самом деле находится Redis. Kubernetes спроектирован как автономная многоузловая система, и вы не хотели бы, чтобы ваше приложение выбирало случайное хранилище данных в зависимости от того, на каком узле оно развертывается (и, если на то пошло, вы не хотели бы развертывать автономный Redis на каждом узле).2. Огромное спасибо. Итак, в каких ситуациях мы используем сеть хостов: верно?
3. Я бы рассмотрел это только в наборе демонов, который будет запускать по одной реплике на каждом узле, а затем для программного обеспечения инфраструктуры, которым я хотел управлять в Kubernetes, а не в другом инструменте автоматизации. Даже тогда я не думаю, что когда-либо действительно использовал его.
Ответ №1:
Я думаю, что вы можете использовать службу типа ExternalName
со специальным именем хоста, предоставленным Minikube: https://minikube.sigs.k8s.io/docs/handbook/host-access/#hostminikubeinternal Это предоставляет внешнюю службу, которую можно использовать из Kubernetes.
kind: Service
apiVersion: v1
metadata:
name: redis
spec:
type: ExternalName
externalName: host.minikube.internal
В коде, который выполняется в кластере, просто используйте хост redis
, чтобы Kubernetes мог получить сопоставление с нужным хостом.