如果ı不能正确解释,可能很难解释。
在我们的k8s集群中,我们有两个OpenStack负载均衡器,因为我们想通过必须面向互联网的入口来公开我们的应用程序。在同一集群中,我们还部署了pgadmin4,它必须面向intranet。(只能从内部网络访问。(
因此,在这些OpenStack LB之前,我们还有f5负载均衡器,它处理https连接,ssl。。以及通过内联网或互联网公开的逻辑。
MyApp面向互联网,需要通过host.internet.net 访问
PgAdmin4是内部网,需要通过host.intranet.net/PgAdmin4 访问
因此,问题是,当我试图使用host.internet.net通过ingress公开我的应用程序时,它不会工作,并且收到以下错误,因为它可能无法与正确的openStack-LB通信。当ı试图通过openStack lb IP暴露时,一切都正常工作。
{"level":"error","msg":"找不到的服务dev/oneapihub-ui-dev","time":"2020-03-26T05:20:5Z"}{"level":"error","msg":"找不到的终结点dev/oneapihub-ui-dev","time":"2020-03-26T05:20:5Z"}
问题是,我如何通过入口控制器处理这个问题?我应该安装另一个traefik入口控制器吗?
capel0068340585:~ semural$ kubectl get ingress -n ingress
NAME HOSTS ADDRESS PORTS AGE
ingress-traefik-dashboard * 80 21d
kubectl get tenantSpec -o yaml
loadBalancers:
- ip: <IP1>
name: LBaaS2
ports:
- extPort: 80
name: "80"
nodePort: 30001
- ip: <IP2>
name: LBaaS1
ports:
- extPort: 80
name: "80"
nodePort: 30000
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/oneapihub-ui-dev ClusterIP 10.254.173.130 <none> 80/TCP 15m
NAME ENDPOINTS AGE
endpoints/oneapihub-ui-dev 10.6.24.136:3000 15m
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: traefik
hosts:
- host: host.internet.net -> example
paths: [/]
tls: []
ingress:
enabled: ingress
annotations:
kubernetes.io/ingress.class: traefik
hosts:
- host: host.intranet.net
paths:
- /pgadmin4
错误状态为"Service not found for dev/oneapihub-ui-dev"
,这意味着traefik正试图连接到名为"oneapihub-ui-dev"的dev命名空间中的服务,但它找不到该服务。
您需要确保服务存在并且具有端点。您可以检查kubectl -n dev get service oneapihub-ui-dev
是否存在服务。如果它存在,请检查它是否具有kubectl -n dev get ep oneapihub-ui-dev
的端点。
编辑:如果服务存在并具有终结点,那么您可能需要查看traefik的RBAC权限,看看它是否有足够的权限来查看dev命名空间,以及您是否没有在dev命名空间上部署任何阻止ingress命名空间连接的NetworkPolicies。
我通过使用traefik的labelSelector解决了这个问题。。我只为内部网络公开的服务有一个标签,比如流量类型=内部。。您还可以为RBAC权限提供一个命名空间。
kubernetes:
namespaces:
- default
- database
- monitoring
- logging
- ingress
labelSelector: "traffic-type=internal"