Связывание контейнеров на основе имен контейнеров в kubernetes - PullRequest
0 голосов
/ 30 января 2020

Я пытался создать разные модули, каждый из которых запускает свой собственный контейнер, я пытался следовать тем же инструкциям, связав два docker контейнера:

docker run -d -e POSTGRES_USER=name -e POSTGRES_PASSWORD=pass -e POSTGRES_DB=postgres --name db postgres:10

Другой контейнер:

docker run -p port:port --name image-name --link db:db -t image

и развертывания Kubernetes:

DB

apiVersion: apps/v1
kind: Deployment
metadata:
  name: db
  labels:
    app: db
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db
  template:
    metadata:
      labels:
        app: db
    spec:
      containers:
        - name: db
          image: postgres
          ports:
          - containerPort: 5432
          env:
          - name: "POSTGRES_DB"
            value: "postgres"
          - name: "POSTGRES_USERNAME"
            value: "name"
          - name: "POSTGRES_PASSWORD"
            value: "pass"

APP

apiVersion: apps/v1
kind: Deployment
metadata:
  name: APP
  labels:
    app: APP
spec:
  replicas: 1
  selector:
    matchLabels:
      app: APP
  template:
    metadata:
      labels:
        app: APP
    spec:
      containers:
        - name: APP
          image: image
          ports:
          - containerPort: port

Теперь вопрос, нужно ли создавать контейнеры в одном модуле и назовите его именем, подобным команде docker (db = db)? или мне нужно правильно настроить сеть, чтобы контейнеры могли найти имя хоста?

Ответы [ 3 ]

1 голос
/ 30 января 2020

Вы должны создать сервис, который указывает на ваш модуль (развертывание). С помощью службы вы можете управлять трафиком c для всех развертываний.

Для получения дополнительной информации вы можете проверить этот документ: https://kubernetes.io/docs/concepts/services-networking/service/

, если вы ищете внутренние днс сообщение

проверьте: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/

0 голосов
/ 30 января 2020

В Кубернетесе стручок считается наименьшей единицей, поэтому имеет смысл размещать их в отдельном стручке, чтобы у них был свой жизненный цикл. То, как вы делаете, определенно правильно; чтобы заставить их работать, вам нужно выставить базу данных, чтобы ваше приложение могло к ней подключиться, т. е. выставить базу данных как службу типа ClusterIP, а затем вы можете получить к ней доступ через ее имя службы внутри кластера.

Простой пример -

apiVersion: v1
kind: Service
metadata:
  name: "postgres"
  labels:
    app.kubernetes.io/name: postgres
spec:
  type: ClusterIP
  ports:
    - port: 5432
      targetPort: 5432
      protocol: TCP
      name: dbport
  selector:
    app.kubernetes.io/name: postgres
0 голосов
/ 30 января 2020

Вам необходимо создать сервис поверх базы данных. Документы kubernetes объясняют различные варианты для этого. Если у вас есть служба, ваш модуль сможет искать эту службу по имени, используя DNS, предоставленный kubernetes для модуля. Служба действует как прокси для модуля (в данном случае базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...