Istio:在端口 22 上公开 SFTP 服务器部署

问题描述 投票:0回答:1

我的 Kubernetes 中有以下有效的 SFTP 部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sftp-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sftp
  template:
    metadata:
      labels:
        app: sftp
    spec:
      volumes:
      - name: sftp-storage
        persistentVolumeClaim:
          claimName: sftp-pvc
      containers:
      - name: sftp
        image: atmoz/sftp
        ports:
        - containerPort: 22
        env:
        - name: SFTP_USERS
          value: "user1:password:::user-directory"
        volumeMounts:
        - name: ftm-sftp-storage
          mountPath: "/home/user1/user-directory"
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

我知道部署工作正常,因为如果我

port-forward
部署,我可以使用任何 FTP 客户端(如 FileZilla)轻松访问端口 22 上的目录。

当然,我想要实现的是使用 Istio 将这个部署公开给公众。我尝试通过在自定义网关中公开端口 22 来做到这一点:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: sftp-gw
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*.example.com'
      port:
        name: sftp-gw-server
        number: 22
        protocol: TCP
        targetPort: 22

然后为其创建虚拟服务:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: sftp-vs
spec:
  gateways:
    - sftp-gw.default.svc.cluster.local
  hosts:
    - my-host.example.com
  tcp:
    - match:
        - port: 22
      route:
        - destination:
            host: sftp-service.default.svc.cluster.local
            port:
              number: 22

部署服务如下所示:

kind: Service
apiVersion: v1
metadata:
  name: sftp-service
spec:
  ports:
    - protocol: TCP
      port: 22
      targetPort: 22
  selector:
    app: sftp-deployment

这个配置对我来说不起作用。 有谁知道如何正确配置 Istio 以公开服务/部署的端口 22,以便可以通过 FTP 客户端等方式访问它? 预先感谢。

kubernetes istio istio-gateway
1个回答
0
投票

请对应用程序网关、虚拟服务和 Istio 入口网关进行以下更改。由于对象中的端口不匹配,请求将无法正确路由。以下更改是基于节点端口提到的,如果使用 LB,请相应调整。

网关:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: sftp-gw
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
      - '*.example.com'
      port:
        name: tcp
        number: <mention nodeport number of tcp service ingwservice>
        protocol: TCP

虚拟服务:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: sftp-vs
spec:
  gateways:
    - sftp-gw.default.svc.cluster.local
  hosts:
    - my-host.example.com
  tcp:
    - match:
      - port: <mention nodeport number of tcp service ingwservice>
      route:
      - destination:
          host: sftp-service.default.svc.cluster.local
          port:
            number: 22

Istio 入口网关服务: 请声明将侦听 sftp 请求的新 tcp 服务。以下信息必须与应用程序网关定义匹配。请提供相应的nodePort、端口和targetPort号

- name: tcp
  nodePort: 30009
  port: 30009
  protocol: TCP
  targetPort: 30009
© www.soinside.com 2019 - 2024. All rights reserved.