Как модуль Kubernetes может подключиться к базе данных, которая работает в той же локальной сети (за пределами кластера), что и хост? - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть кластер Kubernetes (K8s), работающий на физическом сервере A (IP-адрес внутренней сети 192.168.200.10) и база данных PostgreSQL, работающая на другом физическом сервере B (IP-адрес внутренней сети 192.168.200.20). Как мой контейнер приложений Java (модуль), работающий в K8, может подключаться к базе данных PostgreSQL на сервере B?

ОС: Ubuntu v16.04 Docker 18.09.7 Kubernetes v1.15.4 Calico v3.8.2 Базовый образ Pod: openjdk: 8-jre-alpine

Я пробовал следовать этому примеру для создания службы и конечной точки

kind: Service
apiVersion: v1
metadata:
 name: external-postgres
spec:
 ports:
 - port: 5432
   targetPort: 5432
---
kind: Endpoints
apiVersion: v1
metadata:
 name: external-postgres
subsets:
 - addresses:
     - ip: 192.168.200.20
   ports:
     - port: 5432

И у меня была строка подключения JDBC в виде: jdbc: postgresql: // external-postgres / MY_APPDB, но это не работает. Модуль не может пропинговать сервер B или телнетить базу данных, используя указанный внутренний IP-адрес или пинговать внешнее имя службы postgres. Я не хочу использовать «hostNetwork: true» или подключать сервер B через публичный IP-адрес.

Любой совет очень ценится. Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Полагаю, вы можете заменить CALICO_IPV4POOL_CIDR без повторного запуска кластера K8s с помощью инструмента kubeadm, возможно, в некоторых случаях это может быть полезно.

Удалите текущий плагин Calico CNI установка, например ::

$ kubectl delete -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

Установить Calico CNI addon, снабжая параметр CALICO_IPV4POOL_CIDR требуемым значением:

$ curl -k https://docs.projectcalico.org/v3.8/manifests/calico.yaml --output some_file.yaml && sed -i "s~$old_ip~$new_ip~" some_file.yaml && kubectl apply -f some_file.yaml

Повторное вращение CoreDNS pods:

$ kubectl delete pod --selector=k8s-app=kube-dns -n kube-system

Подождите, пока модули CoreDNS получат IP-адрес из нового сетевого пула CIDR.

0 голосов
/ 01 октября 2019

Я только что обнаружил, что проблема связана с конфликтом сети K8s с подсетью локальной сети сервера (192.168.200.x).

Во время инициализации кластера K8s

kubadmin init --pod-network-cidr=192.168.0.0/16

Диапазон IP-адресов CIDR 192.168.0.0/16 должен быть изменен на что-то другое, например. 10.123.0.0/16
И этот диапазон IP-адресов также должен быть изменен в файле calico.yaml перед применением плагина Calico:

# The default IPv4 pool to create on startup if none exists. Pod IPs will be
# chosen from this range. Changing this value after installation will have
# no effect. This should fall within `--cluster-cidr`.
  - name: CALICO_IPV4POOL_CIDR
    value: "10.123.0.0/16"

Может теперь пинговать и telnet-сервер B после сброса и повторного запускакластер K8s с другим CIDR.

...