Открытие портов UDP и TCP для sftp-сервера с помощью Ingress в GKE

Я пытаюсь настроить развертывание с несколькими кластерами, в котором есть несколько кластеров, и один вход - это балансировка нагрузки между ними.

Службы HTTP хорошо работают с настройкой, проблема здесь в sftp сервере.

Ссылаясь на этот ответ и этот документация Я пытаюсь получить доступ к порту 22 sftp услуга.

Развертывание sftp осуществляется через порт 22. Ниже приведен манифест:

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: sftp
  labels:
    environment: production
    app: sftp
spec:
  replicas: 1
  minReadySeconds: 10
  template:
    metadata:
      labels:
        environment: production
        app: sftp
      annotations:
        container.apparmor.security.beta.kubernetes.io/sftp: runtime/default
    spec:
      containers:
        - name: sftp
          image: atmoz/sftp:alpine
          imagePullPolicy: Always
          args: ["user:1001:100:upload"]
          ports:
            - containerPort: 22
          securityContext:
            capabilities:
              add: ["SYS_ADMIN"]
          resources: {}


Вот простой манифест для sftp-сервиса, использующего сервис NodePort:

apiVersion: v1
kind: Service
metadata:
  labels:
    environment: production
  name: sftp-service
spec:
  type: NodePort
  ports:
  - name: sftp-port
    targetPort: 9000
    port: 9000
    nodePort: 30063
    protocol: TCP
  selector:
    app: sftp

ConfigMap create ссылается на вышеупомянутую документацию, и ответ выглядит следующим образом:

apiVersion: v1
kind: ConfigMap
metadata:
  name: sftp-service
data:
  9000: "default/sftp-service:22"

И, наконец, входной манифест выглядит примерно так:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-foo
  annotations:
    kubernetes.io/ingress.global-static-ip-name: static-ip
    kubernetes.io/ingress.class: gce-multi-cluster
spec:
  backend:
    serviceName: http-service-zone-printer
    servicePort: 80
  rules:
  - http:
      paths:
      - path: /sftp
        backend:
          serviceName: sftp-service
          servicePort: 22
  template:
    spec:
      containers:
        - name: proxy-port
          args:
            - "--tcp-services-configmap=default/sftp-service"

Я чувствую, что не понял, как открыть порт TCP / UDP для sftp-сервера на кубернетах с использованием входящего трафика. Что я здесь делаю не так?

Есть ли другой способ простой настройки sftp с использованием службы Ingress и NodePort в многокластерном развертывании?

Вот официальный документ, о котором я говорю сделать настройку.


comment
Почему для вашего containerPort установлено значение 80, а для targetPort службы установлено значение 9000? Эти два значения должны совпадать. плюс вход нацелен на служебный порт 22, который служба не использует   -  person Patrick W    schedule 18.07.2019


Ответы (2)


Вам нужно запустить HTTP-сервер.

Вы можете запустить HTTP-сервер, который предоставляет те же файлы, возможно, с боковым контейнером в том же модуле.

person EAT    schedule 18.07.2019
comment
Задача вопроса не в том, чтобы размещать файлы с помощью какого-либо сервера (HTTP / HTTPS), а в том, чтобы настроить сервер sftp. - person Amit Yadav; 18.07.2019
comment
Невозможно открыть порт и обойти атрибут протокола, в настоящее время ftp не поддерживается, только на Nodeport вы можете это сделать - person EAT; 18.07.2019

похоже, что это не поддерживается для входящего трафика, поэтому существует эта проблема.

Возможным решением может быть использование nodeport для sftp, как описано в этом документ

person Aleksandar    schedule 17.07.2019
comment
Я уже использую службу NodePort для раскрытия развертывания sftp. Пожалуйста, манифесты, которые я предоставил в вопросе. - person Amit Yadav; 18.07.2019
comment
Ах, извините, я наблюдал за этим. Что выйдет, когда вы сделаете sftp -v -v -oPort=30063 ...? - person Aleksandar; 18.07.2019
comment
Порт 9000 предоставляется через входной контроллер, а не 30063, поэтому выполнение sftp -vvvoPort=9000 [email protected] дает следующий результат: OpenSSH_7.4p1 Debian-10+deb9u6, OpenSSL 1.0.2s 28 May 2019 \n debug1: Reading configuration data /etc/ssh/ssh_config \n debug1: /etc/ssh/ssh_config line 19: Applying options for * \n debug2: resolving "130.211.43.104" port 9000 \n debug2: ssh_connect_direct: needpriv 0 \n debug1: Connecting to 130.211.43.104 [130.211.43.104] port 9000. И застревает. [Я добавил \ n, чтобы указать новую строку.] - person Amit Yadav; 18.07.2019