端口转发

端口转发配置 #

本文档介绍如何配置端口转发功能。

什么是端口转发? #

PortForward 是一个 kwok 配置,允许用户定义和模拟到单个 Pod 的端口转发。

下面的 YAML 显示了 PortForward 资源的所有字段

kind: PortForward
apiVersion: kwok.x-k8s.io/v1alpha1
metadata:
  name: <string>
  namespace: <string>
spec:
  forwards:
  - ports:
    - <int>
    target:
      port: <int>
      address: <string>
    command:
    - <string>
    - <string>

要将 PortForward 与要模拟的特定 Pod 关联,用户必须确保 metadata.namemetadata.namespace 与目标 Pod 的名称和命名空间不一致。

Pod 的附加设置通过 forwards 字段指定。forwards 字段按组组织,每个组对应于共享相同转发设置的端口集合。每个组由端口号列表(ports)和共享转发设置(targetcommand)组成。

如果在组中未给出 ports,则该组中的 targetcommand 将应用于目标 Pod 的所有端口。

target 字段指定要转发的目标地址。如果设置了 command 字段,则将忽略 target 字段。command 字段允许用户定义要执行的命令以转发端口。command 在 kwok 的容器中执行。command 应为字符串数组,其中第一个元素为命令,其余元素为参数。此外,命令应在容器的 PATH 中。

ClusterPortForward #

除了模拟单个 Pod 外,用户还可以通过 ClusterPortForward 模拟多个 Pod 的端口转发。

下面的 YAML 显示了 ClusterPortForward 资源的所有字段

kind: ClusterPortForward
apiVersion: kwok.x-k8s.io/v1alpha1
metadata:
  name: <string>
spec:
  selector:
    matchNamespaces:
    - <string>
    matchNames:
    - <string>
  forwards:
  - ports:
    - <int>
    target:
      port: <int>
      address: <string>
    command:
    - <string>
    - <string>

与 PortForward 相比,其 metadata.namemetadata.namespace 必须与关联的 Pod 匹配,ClusterPortForward 有一个额外的 selector 字段,用于指定要模拟的目标 Pod。matchNamespacesmatchNames 都表示为列表,旨在通过不同级别获取 Pod 集合

  1. 如果 matchNamespaces 为空,则 ClusterPortForward 将应用于由 kwok 管理且其名称列在 matchNames 中的所有 Pod。
  2. 如果 matchNames 为空,则 ClusterPortForward 将应用于由 kwok 管理且位于 matchNamespaces 中列出的命名空间下的所有 Pod。
  3. 如果 matchNamesmatchNamespaces 都未设置,则 ClusterPortForward 将应用于 kwok 管理的所有 Pod。

ClusterPortForward 的 forwards 字段与 PortForward 中的 forwards 字段具有相同的语义。

示例 #