类似于this question,但适用于通用kubernetes。我正在编写的软件如何以编程方式检测集群中是否已存在任何入口控制器?
答案 0 :(得分:1)
您很可能不会,因为入口控制器只是一个部署,它通过使用REST或某些其他Kubernetes API客户端从Kubernetes API服务器获取它们来读取和解释Kubernetes入口资源。
如果存在入口资源,则强烈暗示了存在入口控制器。
ingress resource是Kubernetes资源,用于定义入口规则。您可以在https://kubernetes/apis/extensions/v1beta1/ingresses处查询Kubernetes API服务器,也可以使用kubectl get ingress
,如其他人所述。
除非存在多个入口控制器(请参阅https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/#using-multiple-ingress-controllers),否则注释ingress.class
并不是强制性的。
因此,最后您可能会找到提示,表明存在一个ingerss控制器,并且通过阅读入口规则及其注释,您可能还会提示存在哪个入口控制器,但是您不能依赖它。
答案 1 :(得分:1)
是的,这有点棘手,因为没有ingress-controler
这样的API对象,而只有ingress
这样的API对象。 Ingress
仅与入口控制器松散耦合,不需要成功部署后者。因此,存在Ingress资源并不能单独指示Ingress控制器。
然而,您 可能 想要利用的技巧是将Ingress的Events
部分用作一些指示性信息的来源。
因此,当您在尚未部署Ingress控制器的新k8s集群中部署Ingress时,“事件”部分为空:
# deploy Ingress (no ingress controller yet)
$ kubectl apply -f - <<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
spec:
rules:
- http:
paths:
- path: /testpath
backend:
serviceName: test
servicePort: 80
EOF
# check that Ingress deployed successfully
$ k get ing
NAME HOSTS ADDRESS PORTS AGE
test-ingress * 80 36m
# confirm there are no Events so far
$ k describe ing
Name: test-ingress
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
*
/testpath test:80 (<none>)
...
nginx.ingress.kubernetes.io/rewrite-target: /
Events: <none>
然后,如果您deploy the ingress controller进入事件确实获得了一些额外的信息:
# deploy ingress controller
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
namespace/ingress-nginx created
configmap/nginx-configuration created
configmap/tcp-services created
configmap/udp-services created
serviceaccount/nginx-ingress-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-role created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
deployment.apps/nginx-ingress-controller created
# check Ingress details once again
$ k describe ing test-ingress
Name: test-ingress
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
*
/testpath test:80 (<none>)
...
nginx.ingress.kubernetes.io/rewrite-target: /
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 7m11s nginx-ingress-controller Ingress default/test-ingress
答案 2 :(得分:0)
有一些用Golang编写的函数,当我们点击时会返回数据
kubectl get ingress --all-namespaces
请参考此链接,也许在将github存储库合并到您的代码中之后,您可以获得一些帮助。
此博客还提供了有关此类实现的一些信息,尽管不是-
答案 3 :(得分:0)