Попытка открыть простой TCP с помощью nginx-ingress-controller на Kubernetes Bare-Metal

В настоящее время я изучаю основы kubernetes, и я хотел бы открыть mongodb за пределами моего кластера. Я настроил свой входной контроллер nginx и следую этому документ, чтобы открыть простое TCP-соединение.

Это моя конфигурация службы Ingress:

apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    helm.sh/chart: ingress-nginx-4.0.15
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 1.1.1
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: NodePort
  ipFamilyPolicy: SingleStack
  externalIPs:
  - 172.30.63.51
  ipFamilies:
    - IPv4
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
      appProtocol: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
      appProtocol: https
    - name: proxied-tcp-27017
      port: 27017
      protocol: TCP
      targetPort: 27017
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: controller

Карта конфигурации для TCP-соединений прокси:

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  27017: "global-stack/global-stack-mongo-svc:27017"

Мой входной контроллер хорошо работает на портах 80 и 443 для предоставления моих услуг, но я не могу получить доступ к порту 27017.

Результат kubectl get svc -n ingress-nginx:

NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP    PORT(S)                                
ingress-nginx-controller             NodePort    10.97.149.93    172.30.63.51   80:30159/TCP,443:32585/TCP,27017:30098/TCP
ingress-nginx-controller-admission   ClusterIP   10.107.33.165   <none>         443/TCP                                  

Внешний IP хорошо реагирует на curl 172.30.63.51:80

<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

Но не могу ответить на порт 27017:

curl: (7) Failed to connect to 172.30.63.51 port 27017: Connection refused

Мой сервис монго:

apiVersion: v1
kind: Service
metadata:
  name: global-stack-mongo-svc
  namespace: global-stack
  labels:
    app: global-stack-mongo-app
spec:
  type: ClusterIP
  ports:
  - name: http
    port: 27017
    protocol: TCP
    targetPort: 27017
  selector:    
    app: global-stack-mongo-app

IP-адрес кластера служб — 10.244.1.57, и он хорошо отвечает.

>> curl 10.244.1.57:27017

It looks like you are trying to access MongoDB over HTTP on the native driver port.

Если бы кто-нибудь мог мне помочь, я был бы очень благодарен. Спасибо

Гием.

В чем проблема не использовать nginx ingress? Какую цель вы пытаетесь достичь с его помощью?

Manuel 15.03.2022 11:22

без использования входного контроллера я мог бы предоставить свою службу напрямую через порт узла, но в этом случае я не мог выбрать доступ к определенному порту. Я бы просто смог получить доступ к моему монго из-за пределов кластера, например, достигнув mongodb://admin:[email protected]:27017". Возможно ли это?

Guieme 15.03.2022 11:29
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
0
2
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После некоторых исследований я решил свою проблему.

в документации nginx-ingress это не описано, но вам нужно сопоставить карту конфигурации TCP с контейнером ingress-controller с этими строками в файле развертывания:

  args:
    - /nginx-ingress-controller
    - --election-id=ingress-controller-leader
    - --controller-class=k8s.io/ingress-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

Другие вопросы по теме