Как получить доступ к pgsql из pgadmin на kubernetes
Я играю с кубенцами. Я создал StatefulSet под управлением postgresql. Я создал сервис с ClusterIP: None
, Я запустил модуль с pgadmin4. Я могу добраться до pgadmin из моего браузера. Когда я пытаюсь получить доступ к своему серверу pgsql из pgadmin, он говорит мне, что ни ip, ни порт недоступны. В сообщении об ошибке отображается IP-адрес, поэтому я знаю, что он разрешает правильное имя модуля.
Это MicroK8s на Ubuntu.
Вот мои конфиги.
--- pomodoro-pgsql StatefulSet ---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: pomodoro-pgsql
namespace: pomodoro-services
spec:
selector:
matchLabels:
app: pomodoro-pgsql
env: development
serviceName: pomodoro-pgsql
replicas: 1
template:
metadata:
labels:
app: pomodoro-pgsql
env: development
spec:
containers:
- name: pomodoro-pgsql
image: localhost:32000/pomodoro-pgsql
env:
- name: POSTGRES_PASSWORD
value: blahblah
- name: POSTGRES_USER
value: blahblah
- name: POSTGRES_DB
value: blahblah
ports:
- name: pgsql
containerPort: 5432
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: data
spec:
resources:
requests:
storage: 1Gi
accessModes:
- ReadWriteOnce
--- pomodoro-pgsql Безголовый Сервис ---
apiVersion: v1
kind: Service
metadata:
name: pomodoro-pgsql
namespace: pomodoro-services
spec:
clusterIP: None
selector:
app: pomodoro-pgsql
env: development
ports:
- name: pgsql
port: 5432
--- pgadmin4 Pod -
apiVersion: v1
kind: Pod
metadata:
name: pomodoro-pgadmin
namespace: pomodoro-services
labels:
env: development
spec:
containers:
- name: pomodoro-pgadmin
image: localhost:32000/pomodoro-pgadmin
env:
- name: PGADMIN_DEFAULT_EMAIL
value: blahblah
- name: PGADMIN_DEFAULT_PASSWORD
value: blahblah
imagePullPolicy: IfNotPresent
restartPolicy: Always
--- Сервис pgadmin4 ---
apiVersion: v1
kind: Service
metadata:
name: pomodoro-pgadmin
namespace: pomodoro-services
spec:
type: NodePort
ports:
- port: 5002
targetPort: 80
selector:
app: pomodoro-pgadmin
env: development
Я могу видеть IP-адреса через Dig
microk8s.kubectl run `
--namespace pomodoro-services `
-it srvlookup `
--image=tutum/dnsutils --rm `
--restart=Never `
-- dig SRV pomodoro-pgsql.pomodoro-services.svc.cluster.local
Здесь ошибка от pgadmin. Обратите внимание, что IP-адрес правильный для стручка.
Unable to connect to server:
could not connect to server: Operation timed out
Is the server running on host "pomodoro-pgsql-0.pomodoro-pgsql.pomodoro-
services.svc.cluster.local" (10.10.10.219) and accepting
TCP/IP connections on port 5432?
Вот логи от pgsql pod
2019-01-02 04:23:05.576 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
2019-01-02 04:23:05.576 UTC [1] LOG: listening on IPv6 address "::", port 5432
2019-01-02 04:23:05.905 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2019-01-02 04:23:06.430 UTC [21] LOG: database system was shut down at 2019-01-01 20:01:36 UTC
2019-01-02 04:23:06.630 UTC [1] LOG: database system is ready to accept connections
По запросу, вот результаты от kubectl get services
(IP-адреса были изменены.)
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
pomodoro-pgadmin NodePort 10.1.18.45 <none> 5002:30437/TCP 12h
pomodoro-pgsql ClusterIP None <none> 5432/TCP 46h
pomodoro-ping-rapi ClusterIP 10.1.18.36 <none> 8888/TCP 47h
[обновление 1/2/2019] Я подключился к другому контейнеру в кластере и попытался telnet
и затем psql
в postgres. Я не мог соединиться ни с одной программой. Я мог запустить psql в контейнере, на котором запущен сервер postgresql. Моя текущая теория состоит в том, что сервер выставил 5432 локально, но он отфильтрован от других модулей.
Я подтвердил, что /var/lib/postgresql/data/postgresql.conf
содержит следующее:
listen_addresses = '*'
С помощью microk8s.kubctl port-forward pomodoro-pgsql-0 5432:5432
Мне удалось подключиться к 5432 через telnet.
_> telnet localhost 5432
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
[обновление 1/2/2019]
Результаты kubctl exec pomodoro-pgsql-0 -- nslookup pomodoro-pgsql
nslookup: can't resolve '(null)': Name does not resolve
nslookup: can't resolve 'pomodoro-pgsql': Try again
command terminated with exit code 1
Результаты kubctl exec pomodoro-pgsql-0 -- nslookup pomodoro-pgsql-0
Name: pomodoro-pgsql-0
Address 1: 10.1.1.19 pomodoro-pgsql-0.pomodoro-pgsql.pomodoro-services.svc.cluster.local
nslookup: can't resolve '(null)': Name does not resolve
Примечание. IP-адреса меняются при перезагрузке компьютера.
0 ответов
Проблема заключалась в правиле брандмауэра для компьютера под управлением microk8s. Я обнаружил, что это задокументировано на их веб-странице, где документы говорят нам сделать это:
sudo iptables -P FORWARD ACCEPT
sudo apt-get install iptables-persistent