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

ktm*_*124 7 kubernetes kubectl

我想检索作用于 Kubernetes 服务的所有入口。

我可以使用命令获取命名空间中的入口kubectl get ingress -n <namespace>

kubectl 中是否有命令可以让我获取作用于特定 Kubernetes 服务的入口?

Sam*_*Sam 12

要获取集群中的所有入口规则,您可以运行:

kubectl get ingress -A
Run Code Online (Sandbox Code Playgroud)

要获取所有入口规则(包括其使用的服务)的摘要,您可以运行以下命令:

kubectl describe ingress -A
Run Code Online (Sandbox Code Playgroud)

要获取 json 格式的完整入口对象,您可以运行以下命令:

kubectl get ingress -A -o json
Run Code Online (Sandbox Code Playgroud)

然后,您可以解析该 json 以获取使用的服务。


jab*_*son 6

您可以列出所有入口对象及其相应的服务,如下所示:

> 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

Run Code Online (Sandbox Code Playgroud)

如果您想过滤掉并仅获取给定服务名称的入口对象列表,您可以执行以下操作(需要安装 jq):

> kubectl get ing -o=json | jq '.items[] | select(..|.service?.name == "my-products") | .metadata.name'

"my-ingress"
"my-ingress2"
"my-ingress3"
Run Code Online (Sandbox Code Playgroud)
> kubectl get ing -o=json | jq '.items[] | select(..|.service?.name == "neg-demo-svc") | .metadata.name'

"neg-demo-ing"
Run Code Online (Sandbox Code Playgroud)

我一直在寻找一种方法来实现相同的目标,而无需仅使用额外的依赖项jsonpath,但似乎不可能在过滤器内进行递归下降。