在GKE中使用Ingress公开sftp服务器的UDP和TCP端口

时间:2019-07-17 16:06:24

标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-ingress configmap

我正在尝试建立一个多集群部署,其中有多个集群,而一个入口正在负载均衡它们之间的请求。

HTTP服务可以很好地配合设置,这里的问题是sftp服务器。

参考此answer和此documentation,我正在尝试访问sftp服务的端口22。

在端口22上公开了sftp的部署。以下是清单:

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: {}


这是使用NodePort服务的sftp-service的简单清单:

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创建以引用上述文档,答案如下所示:

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"

我觉得我不了解使用入口在kubernetes上公开sftp服务器的TCP / UDP端口的方法。我在这里做什么错了?

在多集群部署中,是否还有其他方法可以使用入口和NodePort服务来简单设置sftp

Here是我要进行设置的正式文件。

2 个答案:

答案 0 :(得分:-1)

看来Ingress不支持此功能,这就是this问题存在的原因

一种可行的解决方案可能是按照document

中所述将nodeport用于sftp

答案 1 :(得分:-1)

您需要运行HTTP服务器。

您可以运行一个HTTP服务器,以暴露相同的文件,也许在同一个容器中带有侧面容器