3 个版本 (重大更改)
0.3.0 | 2023年7月22日 |
---|---|
0.2.0 | 2023年7月17日 |
0.1.0 | 2023年7月16日 |
#972 in 命令行工具
67KB
1.5K SLoC
k8s:fwd — 基于配置的 Kubernetes 多端口转发
用于处理对多个服务和跨多个集群的端口转发的工具。
当前设置基于 cargo,直到可以提供特定平台的二进制文件。要安装最新版本(或更新到它),请运行
cargo install k8sfwd
请注意,应用程序内部依赖于 kubectl
,因此它必须在您的路径中。如果 kubectl
不在您的路径中,您可以通过 --kubectl
参数或 KUBECTL_PATH
环境变量指定它。
根据您的配置,您将看到类似以下内容
██╗░░██╗░█████╗░░██████╗░░░░░███████╗██╗░░░░░░░██╗██████╗
██║░██╔╝██╔══██╗██╔════╝░██╗░██╔════╝██║░░██╗░░██║██╔══██╗
█████═╝░╚█████╔╝╚█████╗░░╚═╝░█████╗░░╚██╗████╗██╔╝██║░░██║
██╔═██╗░██╔══██╗░╚═══██╗░██╗░██╔══╝░░░████╔═████║░██║░░██║
██║░╚██╗╚█████╔╝██████╔╝░╚═╝░██║░░░░░░╚██╔╝░╚██╔╝░██████╔╝
╚═╝░░╚═╝░╚════╝░╚═════╝░░░░░░╚═╝░░░░░░░╚═╝░░░╚═╝░░╚═════╝
k8s:fwd 0.2.0 - a Kubernetes multi-cluster port forwarder
Using kubectl version v1.24.12-dispatcher
Using config from 2 locations
Forwarding to the following targets:
#0 Items API (Staging)
target: service/foo.test-api
context: (default)
cluster: (default)
#1 Items API (Production)
target: pod/foo-59b58f5d68-6t6bh.test-api
context: (default)
cluster: production
Spawning child processes:
#0: Error from server (NotFound): pods "foo-59b58f5d68-6t6bh" not found
#0: Process exited with exit status: 1 - will retry in 5 sec
#1: Forwarding from 127.0.0.1:5012 -> 80
#1: Forwarding from 127.0.0.1:46737 -> 8080
#1: Forwarding from [::1]:5012 -> 80
#1: Forwarding from [::1]:46737 -> 8080
#0: Error from server (NotFound): pods "foo-59b58f5d68-6t6bh" not found
#0: Process exited with exit status: 1 - will retry in 5 sec
命令行选项
过滤器
可以通过在命令行上指定的前缀过滤器选择目标。只有以指定前缀开始的目标(和目标名称)将被转发。在以下示例中,以 foo
和 bar
开始的服务将被选择
k8sfwd foo bar
过滤器还可以与标签一起使用
k8sfwd -t test foo bar
标签
可以将标签分配给目标。当 k8sfwd
与一个或多个用空格分隔的 --tags
参数启动时,目标将被过滤以匹配选择。如果指定了多个值(例如 --tags foo bar
),则任何匹配的标签都将导致选择目标。如果使用加号将两个标签组合(例如 --tags foo+bar
),则只选择同时匹配两个标签的目标。
目标标签 | --tags 参数 |
已选择 |
---|---|---|
(无) | (无) | ✅ 是 |
(无) | --tags some |
❌ 否 |
["foo", "bar", "baz"] |
(无) | ✅ 是 |
["foo", "bar", "baz"] |
--tags fubar |
❌ 否 |
["foo", "bar", "baz"] |
--tags foo bar |
✅ 是 |
["foo", "bar", "baz"] |
--tags bar |
✅ 是 |
["foo", "bar", "baz"] |
--tags foo+baz |
✅ 是 |
["foo", "bar", "baz"] |
--tags foo+fubar |
❌ 否 |
["foo", "bar", "baz"] |
--tags foo+baz fubar |
✅ 是 |
["fubar"] |
--tags foo+baz fubar |
✅ 是 |
配置
配置以 YAML 文件的形式提供。
- 如果在程序启动时通过
--file
参数指定了一个或多个文件,将加载它们的配置。 - 如果没有指定配置文件,
k8sfwd
将递归地在以下位置查找.k8sfwd
文件:- 当前目录层次结构
- 您的家目录
- 您的配置目录,按此顺序。
非目标配置(例如,重试延迟)始终从上面的层次结构加载,无论是否存在 --file
参数。但是,所有未通过 --file
参数指向的文件直接指定的目标配置都将被忽略。
请参阅k8sfwd-example.yaml
以获取示例。
---
version: 0.1.0
config:
# Optional: Number of seconds to wait before attempting to re-establish
# a broken connection.
retry_delay_sec: 5.0
targets:
- name: Test API (Staging) # Optional, for display purposes.
target: foo # The name of the resource to forward to.
tags: # Optional, for use with `--tags <tag1> <tag2>+<tag3>`
- integration
type: service # Can be service, deployment or pod.
namespace: bar # The namespace of the resource.
context: null # Optional; will default to current context.
cluster: null # Optional; will default to current cluster.
ports:
- "5012:80" # Forward resource port 80 to local port 5012.
- "8080" # Forward resource port 8080 to random local port.
- name: Test API (Production)
target: foo-59b58f5d68-6t6bh
type: pod
namespace: bar
cluster: production
listen_addrs: # Select the listen addresses; defaults to `localhost`.
- "127.1.0.1"
ports:
- "5012:80"
依赖项
~3–12MB
~132K SLoC