Как открыть tcp-порт postgres с помощью Docker Desktop для Windows Kubernetes и ingress-nginx

#docker #nginx #kubernetes #nginx-ingress

#docker #nginx #kubernetes #nginx-вход

Вопрос:

Я использую «Docker Desktop для Windows» с kubernetes. Пока это здорово.

Я хотел бы управлять своей базой данных postgress (TCP: 5432). Я использую входной контроллер kubernetes «ingress-nginx», который позволяет настроить его для отображения TCP с помощью configmap.

Вот что у меня есть до сих пор:

 apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  5432: "ingress-nginx/postgres:5432"

---
# SEE: https://kubernetes.io/docs/concepts/services-networking/ingress/

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myproject.com
  annotations:
    kubernetes.io/ingress.class: nginx
    cert-manager.io/cluster-issuer: clusterissuer-selfsigned
    # See: https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/rewrite/README.md
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
spec:
  tls:
  - hosts:
    - www.myproject.com
    secretName: tls-myproject
  rules:
  # Avoid Quasar build paths:  /css, /fonts, /icons, /js
  - http:
      paths:
        # See https://github.com/kubernetes/ingress-nginx/blob/master/docs/examples/rewrite/README.md
      - path: /data(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: backend
            port:
              number: 80
...
  

Теперь мне нужно:

  1. добавьте аргумент «—tcp-services-configmap=»
  2. открыть 5432, если 1) не делает этого автоматически.

Я нашел ingress-nginx-controller на панели инструментов kubernetes и отредактировал вручную, как показано ниже, но его поведение не изменилось.

 spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/component: controller
      app.kubernetes.io/instance: ingress-nginx
      app.kubernetes.io/name: ingress-nginx
  template:
    metadata:
      creationTimestamp: null
      labels:
        app.kubernetes.io/component: controller
        app.kubernetes.io/instance: ingress-nginx
        app.kubernetes.io/name: ingress-nginx
    spec:
      volumes:
        - name: webhook-cert
          secret:
            secretName: ingress-nginx-admission
            defaultMode: 420
      containers:
        - name: controller
          image: >-
            k8s.gcr.io/ingress-nginx/controller:v0.41.0@sha256:e6019e536cfb921afb99408d5292fa88b017c49dd29d05fc8dbc456aa770d590
          args:
            - /nginx-ingress-controller
            - '--publish-service=$(POD_NAMESPACE)/ingress-nginx-controller'
            - '--election-id=ingress-controller-leader'
            - '--ingress-class=nginx'
            - '--configmap=$(POD_NAMESPACE)/ingress-nginx-controller'
            - '--validating-webhook=:8443'
            - '--validating-webhook-certificate=/usr/local/certificates/cert'
            - '--validating-webhook-key=/usr/local/certificates/key'
            - '--tcp-services-configmap=ingress-nginx/tcp-services'
  

Чего мне не хватает? Как я могу настроить это без необходимости вручную редактировать его? Спасибо!

Ответ №1:

Я думаю, что есть 2 проблемы.

  1. Вам необходимо установить nginx отдельно от вашей установки postgress. Это означает, что у вас будет несколько модулей / развертываний nginx и служба, которые существуют в пространстве имен ingress-nginx. Чтобы сделать это, следуйте приведенному здесь руководству. Рекомендуется использовать файл yaml из раздела cloud для развертывания docker desktop. Это тот, кто прошел через этот процесс.

  2. После установки nginx в вашем кластере вам необходимо перейти от postgress deployment / pod -> service -> ingress. Они будут находиться в пространстве имен, отличном от вашего ingress-nginx (по умолчанию все в порядке). Чтобы настроить его, вы можете следовать руководству, расположенному здесь. Если вы хотите протестировать что-то на этом пути, вы можете использовать port-forward команду kubernetes ing для пересылки вашего модуля postgress на ваш локальный компьютер. Вы также можете протестировать свой сервис с помощью того же метода.

Комментарии:

1. Я думаю, что переадресация порта — это, пожалуй, самая простая вещь, которая может сработать. Спасибо!