Трафик по маршруту k8s до postgres по TCP - PullRequest
1 голос
/ 11 марта 2020

Мы запускаем 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>
...