Мы запускаем traefik на k8s, я могу строить маршруты к службам http, но не к TCP, например, я могу получить службу whoami, но не службу postgres.
Initial настройки:
Я установил postgres через стандартную таблицу управления
Я также установил traefik через его схему управления.
Это работает:
apiVersion: apps/v1
metadata:
name: whoami
namespace: shared
labels:
app: containous
name: whoami
spec:
replicas: 2
selector:
matchLabels:
app: containous
task: whoami
template:
metadata:
labels:
app: containous
task: whoami
spec:
containers:
- name: containouswhoami
image: containous/whoami
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: shared
spec:
ports:
- name: http
port: 80
selector:
app: containous
task: whoami
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: whoami
namespace: shared
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: example.com
postgres:
paths:
- backend:
serviceName: whoami
servicePort: http
Я могу открыть свой браузер, перейти к http://example.com и получить ожидаемую страницу whomai.
Поскольку мы развернули postgres через helm, а служба имеет тип ClusterIP Как я могу предоставить своим разработчикам доступ к базе данных? Снова я пошел с «входом k8s», а не с CRD, потому что я не эксперт.
Вот где я думаю, что мне чего-то не хватает по основам c, я знаю, что они пытаются используйте клиента для достижения чего-то подобного:
jdb c: postgresql: //example.com: 5432 / postgres (конечно, клиент допускает ввод пользователя / пароля / базы данных)
- Не ошибаюсь ли я в ожидании создания входного TCP-трафика traefik, который позволил бы такой доступ?
- Какие-нибудь примеры такого доступа на k8s? Потому что я нашел несколько постов, которые имеют дело с docker -compose
- Любыми альтернативами traefik или вообще способом справиться с этой задачей без открытия публичного c IP (то есть типа службы Loadbalancer).
Statefulset:
+ kubectl get statefulset -n shared
NAME READY AGE
admindb-postgresql 1/1 23h
Служба:
+ kubectl get service -n shared
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
admindb-postgresql ClusterIP 10.100.75.113 <none> 5432/TCP 23h
admindb-postgresql-headless ClusterIP None <none> 5432/TCP 23h
whoami ClusterIP 10.100.25.131 <none> 80/TCP 44m
Описание Statefulset:
+ kubectl describe statefulset admindb-postgresql -n shared
Name: admindb-postgresql
Namespace: shared
CreationTimestamp: Tue, 10 Mar 2020 11:05:43 +0200
Selector: app=postgresql,release=admindb,role=master
Labels: app=postgresql
chart=postgresql-8.3.3
heritage=Helm
release=admindb
Annotations: <none>
Replicas: 1 desired | 1 total
Update Strategy: RollingUpdate
Pods Status: 1 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: app=postgresql
chart=postgresql-8.3.3
heritage=Helm
release=admindb
role=master
Init Containers:
init-chmod-data:
Image: docker.io/bitnami/minideb:buster
Port: <none>
Host Port: <none>
Command:
/bin/sh
-cx
echo "current user id: `id`"
mkdir -p /bitnami/postgresql/data
chmod 700 /bitnami/postgresql/data
find /bitnami/postgresql -mindepth 1 -maxdepth 1 -not -name ".snapshot" -not -name "lost+found" | \
xargs chown -R 1001:1001
chmod -R 777 /dev/shm
Requests:
cpu: 250m
memory: 256Mi
Environment: <none>
Mounts:
/bitnami/postgresql from data (rw)
/dev/shm from dshm (rw)
Containers:
admindb-postgresql:
Image: docker.io/bitnami/postgresql:11.6.0-debian-10-r5
Port: 5432/TCP
Host Port: 0/TCP
Requests:
cpu: 250m
memory: 256Mi
Liveness: exec [/bin/sh -c exec pg_isready -U "postgres" -h 127.0.0.1 -p 5432] delay=30s timeout=5s period=10s #success=1 #failure=6
Readiness: exec [/bin/sh -c -e exec pg_isready -U "postgres" -h 127.0.0.1 -p 5432
[ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f /bitnami/postgresql/.initialized ]
] delay=5s timeout=5s period=10s #success=1 #failure=6
Environment:
BITNAMI_DEBUG: false
POSTGRESQL_PORT_NUMBER: 5432
POSTGRESQL_VOLUME_DIR: /bitnami/postgresql
PGDATA: /bitnami/postgresql/data
POSTGRES_USER: postgres
POSTGRES_PASSWORD: <set to the key 'postgresql-password' in secret 'pg-default-password'> Optional: false
POSTGRESQL_ENABLE_LDAP: no
Mounts:
/bitnami/postgresql from data (rw)
/dev/shm from dshm (rw)
Volumes:
dshm:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium: Memory
SizeLimit: 1Gi
Volume Claims:
Name: data
StorageClass:
Labels: <none>
Annotations: <none>
Capacity: 30Gi
Access Modes: [ReadWriteOnce]
Events: <none>
Описание услуги:
+ kubectl describe svc -n shared admindb-postgresql
Name: admindb-postgresql
Namespace: shared
Labels: app=postgresql
chart=postgresql-8.3.3
heritage=Helm
release=admindb
Annotations: <none>
Selector: app=postgresql,release=admindb,role=master
Type: ClusterIP
IP: 10.100.75.113
Port: tcp-postgresql 5432/TCP
TargetPort: tcp-postgresql/TCP
Endpoints: 10.55.0.17:5432
Session Affinity: None
Events: <none>