如何禁用 AKS LoadBalancer 的端口探测?

Chr*_*jen 2 azure kubernetes azure-load-balancer azure-aks

我正在尝试在 Azure AKS 中部署 ftp 服务器映像。为了向公众公开服务器,我添加了一个 LoadBalancer 类型的服务。

apiVersion: v1
kind: Service
metadata:
  name: test-import-ftp
  namespace: staging
spec:
  loadBalancerIP: 168.63.x.x
  type: LoadBalancer
  ports:
  - port: 21
    name: ftp-control
    targetPort: 21
  - port: 50000
    name: ftp-data-0
  - port: 50001
    name: ftp-data-1
  - port: 50002
    name: ftp-data-2
  - port: 50003
    name: ftp-data-3
  - port: 50004
    name: ftp-data-4
  - port: 50005
    name: ftp-data-5
  - port: 50006
    name: ftp-data-6
  - port: 50007
    name: ftp-data-7
  - port: 50008
    name: ftp-data-8
  - port: 50009
    name: ftp-data-9 
  selector:
    app: test-import-ftp
Run Code Online (Sandbox Code Playgroud)

它适用于控制端口,但不适用于数据端口。原因是,它为所有端口配置探测器,而 ftp 服务器不侦听数据端口。这些端口将“按需”打开。

如何禁用数据端口的健康检查?

adh*_*nem 5

AFAIK,你不能禁用健康检查,但你可以让它们与 FTP 服务器一起工作。

像这样调整您的配置:

[...]
spec:
  loadBalancerIP: 168.63.x.x
  type: LoadBalancer
  healthCheckNodePort: 30021
  externalTrafficPolicy: Local
  ports: [...]
Run Code Online (Sandbox Code Playgroud)

因此,您需要设置healthCheckNodePort为合法 nodePort 范围内的端口,并设置externalTrafficPolicyLocal.

这将使服务打开一个 nodePort,LoadBalancer 现在将只检查该端口以确定可用性。缺点是您的健康检查现在只检查节点是否已启动,而不是 ftp 服务是否正在运行。

为此,您必须将 externalTrafficPolicy 设置为 Local。这意味着容器会将实际的客户端源 ip 视为流量源,而不是内部 kubernetes 源。相应地调整您的任何服务设置。然而,对于 FTP,这是可取的,因为它允许服务器检查被动数据连接尝试是否由与原始控制连接相同的客户端完成。

请参阅https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/,“保留客户端源 IP”部分