Kubenetes:在Kubernetes集群中是否可以通过单个请求击中多个Pod

Kubenetes:在Kubernetes集群中是否可以通过单个请求击中多个Pod,第1张

Kubenetes:在Kubernetes集群中是否可以通过单个请求击中多个Pod

如果您在吊舱中安装了kubectl并可以访问api服务器,则可以获取所有端点地址并将它们传递给curl:

kubectl get endpoints <servicename>         -o jsonpath="{.subsets[*].addresses[*].ip}" | xargs curl

在pod中没有kubectl的替代方法:

从Pod访问api服务器的推荐方法是使用kubectl代理:https
://kubernetes.io/docs/tasks/access-application-cluster/access-
cluster/#accessing-the-api-from-a-
荚当然会增加至少相同的开销。或者,您可以直接调用REST
api,则必须手动提供令牌。

APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")TOKEN=$(kubectl describe secret $(kubectl get secrets      | grep ^default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d " ")

如果提供APISERVER和TOKEN变量,则在pod中不需要kubectl,通过这种方式,您只需要curl即可访问api服务器,并只需“
jq”即可解析json输出:

curl $APISERVER/api/v1/namespaces/default/endpoints --silent      --header "Authorization: Bearer $TOKEN" --insecure      | jq -rM ".items[].subsets[].addresses[].ip" | xargs curl

更新(最终版本)

通常可以将APISERVER设置为kubernetes.default.svc,并且令牌应该在pod中的/var/run/secrets/kubernetes.io/serviceaccount/token中可用,因此无需手动提供任何内容:

TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token); curl https://kubernetes.default.svc/api/v1/namespaces/default/endpoints --silent      --header "Authorization: Bearer $TOKEN" --insecure      | jq -rM ".items[].subsets[].addresses[].ip" | xargs curl

jq在这里可用:https://stedolan.github.io/jq/download/(<4
MiB,但值得轻松解析JSON)



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5000610.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-14
下一篇2022-11-14

发表评论

登录后才能评论

评论列表(0条)

    保存