Контейнеры в развертывании kubernetes не используют сеть хостов

#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 мог получить сопоставление с нужным хостом.