当前位置: 首页 > 知识库问答 >
问题:

SFTP服务器在部署到Kubernetes(GKE)时不可访问

穆彬郁
2023-03-14

当使用NodePort服务和Kubernetes入口公开时,SFTP服务器不可访问。但是,如果使用LoadBalancer类型的服务公开相同的部署,它就可以正常工作。

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:pass:1001:100:upload"]
          ports:
            - containerPort: 22
          securityContext:
            capabilities:
              add: ["SYS_ADMIN"]
          resources: {}
apiVersion: v1
kind: Service
metadata:
  labels:
    environment: production
  name: sftp-service
spec:
  type: LoadBalancer
  ports:
  - name: sftp-port
    port: 22
    protocol: TCP
    targetPort: 22
  selector:
    app: sftp

然而,我尝试使用GKE Ingress公开相同的部署,但它不起作用。以下是入口的清单:


# First I create a NodePort service to expose the deployment internally

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

# Ingress service has SFTP service as it's default backend
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: basic-ingress-2
spec:
  backend:
    serviceName: sftp-service
    servicePort: 22
  rules:
  - http:
      paths:
      # "http-service-sample" is a service exposing a simple hello-word app deployment
      - path: /sample
        backend:
          serviceName: http-service-sample
          servicePort: 80

将外部IP分配给入口后(我知道完全设置需要几分钟),xxx.xx.xxx/sample开始工作,但sftp-p 80xxx.xx.xx.xxx不工作。

下面是我从服务器得到的错误:

ssh_exchange_identification: Connection closed by remote host
Connection closed

在上面的设置中,我做错了什么?为什么LoadBalancer服务能够允许访问SFTP服务,而Ingress却失败了?

共有1个答案

惠泳
2023-03-14

在Kubernetes Ingress中路由HTTP/HTTPS协议以外的任何其他流量(参见文档),目前还不完全支持这一点。

您可以尝试做一些解决方法,如这里所描述的:kubernetes:通过Ingress路由非HTTP请求到Container

 类似资料:
  • 我已经在应用程序中添加了这些字段。pom中微服务和依赖关系的yml。xml。Jaeger在my local上运行也可以识别服务 我已经在kubernetes上部署了所有的微服务。请帮助我在kubernetes部署jaeger。 更新:我已达到此步骤。我有一个用于jaeger查询的负载平衡器IP。但是我的微服务将把日志发送到哪个主机和端口??

  • 我正在尝试将一个pod连接到另一个pod,但获得连接拒绝错误。 我只运行: > RavenDB服务器 部署包括: 端口: 容器端口:8080,协议:TCP containerPort:38888,协议:TCP ravendb-cluster01-service RavenDB客户端 连接到ravendb-cluster01-service。登台。svc。簇本地电话:8080 什么不起作用: 客户端

  • 我在Google Container Engine上部署了一个容器,它运行良好。现在,我想公开它。 这个应用程序是一个侦听2个端口的服务。使用kubectl公开部署,我创建了2个负载均衡器,每个端口一个。 我制作了两个负载平衡器,因为kubectl expose命令似乎不允许使用多个端口。虽然我在kubectl上将其定义为type=LoadBalancer,但一旦在GKE上创建了它们,它们就被定义

  • 您好,我是java开发的新手,我正在尝试修改一个同事开发的应用程序,但是当我试图部署它时,我得到了这个错误: servlet.ServletException:org.apache.ibatis.exceptions.PersistenceException: resource database.properties org.glassfish.jersey.servlet.webcomponen

  • 我目前正在使用google云平台设置一个web应用程序,但在使用GKE ingress controller部署时遇到了一个问题。 我无法使用我的子域名访问应用程序。页面显示以下消息: 尽管配置了健康检查,但入口似乎仍然没有正确响应。同时,我的SSL证书对于我的子域名工作正常。 这是我的入口配置: 这就是我的服务: 最后是我的部署: 入口描述如下: 如何使我的web应用正常工作? 提前谢谢你。