我的 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 客户端等方式访问它? 预先感谢。
请对应用程序网关、虚拟服务和 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