如何列出作用于Kubernetes服务的入口



我想检索所有作用于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

最新更新