我想检索所有作用于Kubernetes服务的入口。
我可以使用命令kubectl get ingress -n <namespace>
获取命名空间中的入口。
kubectl中是否有一个命令可以让我获取作用于特定Kubernetes服务的ingress?
要获取集群中的所有入口规则,可以运行:
kubectl get ingress -A
要获得所有入口规则(包括它们使用的服务(的摘要,您可以运行以下命令:
kubectl describe ingress -A
要获得json格式的完整入口对象,可以运行以下命令:
kubectl get ingress -A -o json
然后,您可以解析该json以获得所使用的服务。
您可以列出所有入口对象及其相应的服务,如下所示:
> 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
就可以在没有额外依赖性的情况下实现同样的效果,但似乎不可能在过滤器内进行递归下降。
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
这并不完美,因为这会检测到具有匹配name: $SERVICE
(其中$SERVICE
是您的服务名称(的行的每个Ingress,因此可能存在误报。但是,它应该检测集群中作用于指定服务的所有入口。
您有一些选项。。。
第一个列表所有基于名称空间
kubectl get ingress --namespace=<name-space-here>
然后描述一个特定的入口
kubectl describe ingress <ingress-name-here> --namespace=<name-space-here>
另一个有用的命令是列出集群的所有入口
kubectl get ingress -A
提示,您可以随时使用--help获取有关该命令的详细信息。非常有用
kubectl describe --help
好运:D