如果ı无法正确解释,可能很难解释,抱歉。
在我们的k8s集群中,我们有两个OpenStack-Load Balancer,因为我们想通过必须面向Internet的入口来公开我们的应用程序。在同一群集中,我们还部署了必须面向Intranet的pgadmin4。(只能从内部网络访问。)
因此在这些OpenStack-LB前面,我们还有f5负载平衡器,它处理https连接,ssl ..以及通过Intranet或Internet公开的逻辑。
MyApp面向互联网,需要通过host.internet.net可以访问
PgAdmin4是Intranet,需要通过host.intranet.net/pgadmin4进行访问
所以问题是,当我尝试使用host.internet.net通过入口公开我的应用程序时,它将无法正常工作,并且收到以下错误消息,原因可能是它无法与正确的openStack-LB通信。当我试图通过openStack-lb IP公开所有内容时,一切正常。
{“级别”:“错误”,“消息”:“找不到以下服务 dev / oneapihub-ui-dev“,”时间“:” 2020-03-26T05:20:05Z“} {“ level”:“错误”,“ msg”:“找不到端点 dev / oneapihub-ui-dev“,”时间“:” 2020-03-26T05:20:05Z“}
问题是,如何通过入口控制器处理此问题?我应该安装另一个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
答案 0 :(得分:1)
您的错误状态为"Service not found for dev/oneapihub-ui-dev"
,这意味着traefik试图连接到它无法找到的名为“ oneapihub-ui-dev”的开发名称空间中的服务。
您需要确保该服务同时存在并且具有终结点。您可以使用kubectl -n dev get service oneapihub-ui-dev
检查服务是否存在。如果存在,请检查其端点是否带有kubectl -n dev get ep oneapihub-ui-dev
。
编辑:如果该服务存在并且具有端点,则可能需要调查traefik的RBAC权限,以查看它是否具有足够的权限来查看dev命名空间,以及是否没有在dev命名空间上部署任何NetworkPolicies阻止入口名称空间连接。
答案 1 :(得分:0)
我通过使用traefik使用labelSelector来解决了这个问题。我只为内部网络公开的服务带有标签,例如traffic-type = internal。。您还可以为RBAC权限提供名称空间。 / p>
//given
Pattern pattern = Pattern.compile("(\\w+)=(\\w+);");
String line = "name1=gil;name2=orit;";
Iterator<Matcher> all =
Iterator
.continually(pattern.matcher(line))
.takeWhile(matcher -> matcher.find());
//use it like
io.vavr.collection.Map<String,String> map =
all.toMap(m->m.group(1),m->m.group(2));