我想檢索作用于 Kubernetes 服務的所有入口。
我可以使用命令在命名空間中獲取入口kubectl get ingress -n <namespace>。
kubectl 中是否有一個命令可以讓我獲取作用于特定 Kubernetes 服務的入口?
uj5u.com熱心網友回復:
要獲取集群中的所有入口規則,您可以運行:
kubectl get ingress -A
要獲取所有入口規則(包括它們使用的服務)的摘要,您可以運行以下命令:
kubectl describe ingress -A
要以 json 格式獲取完整的入口物件,您可以運行以下命令:
kubectl get ingress -A -o json
然后,您可以決議該 json 以獲取使用過的服務。
uj5u.com熱心網友回復:
kubectl 中沒有命令,但您可以圍繞它撰寫腳本(Bash):
kubectl get ingress --all-namespaces -o custom-columns=:.metadata.namespace,:.metadata.name --no-headers | while read line; do
namespace=$(awk '{print $1}' <<<"$line")
name=$(awk '{print $2}' <<<"$line")
if kubectl get ingress "$name" -n "$namespace" -o yaml | grep -n " name: $SERVICE"; then
echo "$namespace/$name"
fi
done
這并不完美,因為這會檢測每個具有匹配行的 Ingress name: $SERVICE($SERVICE您的服務名稱在哪里),因此可能存在誤報。但是,它應該檢測集群中作用于指定服務的所有入口。
uj5u.com熱心網友回復:
您可以列出所有入口物件及其相應的服務,如下所示:
> kubectl get ing -o=custom-columns='NAME:.metadata.name,SVCs:..service.name'
NAME SVCs
my-ingress my-products,my-discounted-products
my-ingress2 my-products,my-discounted-products
my-ingress3 my-products,my-discounted-products
my-ingress4 my-products11,my-discounted-products
my-ingress5 my-products22,my-discounted-products
neg-demo-ing neg-demo-svc
如果您想過濾掉并只獲取入口物件串列,對于給定的服務名稱,您可以執行以下操作(需要安裝 jq):
> kubectl get ing -o=json | jq '.items[] | select(..|.service?.name == "my-products") | .metadata.name'
"my-ingress"
"my-ingress2"
"my-ingress3"
> kubectl get ing -o=json | jq '.items[] | select(..|.service?.name == "neg-demo-svc") | .metadata.name'
"neg-demo-ing"
我一直在尋找一種方法來實作相同的效果,而無需額外的依賴jsonpath,但似乎不可能在過濾器內進行遞回下降。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/369251.html
上一篇:將blazor服務器應用程式部署到Kubernetes的問題
下一篇:如何像GKE、EKS、..等KubernetesCloud為Kubernetes中的型別Loadbacer的服務分配外部ip?
