我正在尝试创建一条进入专用网络的隧道。我想根据我试图在 9000-9999 之间建立隧道的内部域名创建一个随机但一致的本地主机端口。
这样我就可以在不同的端口上打开多个隧道,但每次每个域名的端口都是相同的。
这是我正在努力解决的一个小问题:
FQDN=example.internal.net
PORT=$(bash -c "RANDOM=$FQDN; echo \$(( 9000 + \$RANDOM % 1000 ))")
kubectl port-forward --namespace default service/example $PORT:433
我遇到的问题是
$RANDOM
似乎要求种子是数字而不是字符串。因此,无论 $FQDN
的值如何,端口始终相同。
因此我想做的是使用某种一致的哈希算法将字符串转换为数字。
FQDN=example.internal.net
SEED=$( ??? )
PORT=$(bash -c "RANDOM=$SEED; echo \$(( 9000 + \$RANDOM % 1000 ))")
kubectl port-forward --namespace default service/example $PORT:433
有谁知道在上面的示例中执行 FQDN -> SEED 的好方法吗?
您可以像这样使用
cksum
:
for fqdn in example.com example.org example.net; do
seed=$(cksum <<<$fqdn) seed=${seed%% *}
RANDOM=$seed
port=$((9000 + RANDOM%1000))
echo "$fqdn, $port"
done
此循环始终打印:
example.com, 9607
example.org, 9215
example.net, 9821