使用Traefik作为入口控制器(在GCP中的kube集群上)。 是否可以创建使用来自不同命名空间的后端服务的入口规则?
我们的每个" major"都有一个名称空间。代码版本。
1-service.com - > 1-服务进入1服务ns - >同一ns中的1服务svc
2-service.com - > 2-service.com进入2服务中......等等
我还想在"无版本"中找到另一个入口规则。将流量路由到其中一个主要版本的命名空间。
service.com - > service.com进入"服务" ns - > X-service命名空间中的X-service
我想使用版本化的主机名(1-service.com等)将主要版本保留在k8s中,但仍然有一个"最新的"这指向了最新版本。
我相信voyager可以进行跨命名空间入口 - > SVC。 Traefik能做同样的事吗??
答案 0 :(得分:0)
您可以使用以下解决方法:
ExternalName
的服务:apiVersion: v1
kind: Service
metadata:
name: service-1
namespace: unversioned
spec:
type: ExternalName
externalName: service-1.service-1-ns.svc.cluster.local
ports:
- name: http
port: 8080
protocol: TCP
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: traefik
name: ingress-to-other-ns
namespace: service-1-ns
spec:
rules:
- host: latest.example.com
http:
paths:
- backend:
serviceName: service-1
servicePort: 8080
path: /
答案 1 :(得分:0)
刚刚在 EKS 上使用以下示例进行了测试。 Traefik 部署在 default
命名空间中。这是用于 k8s 服务的配置:
---
apiVersion: v1
kind: Service
metadata:
name: 1-service
namespace: 1-service
labels:
app: 1-service
spec:
selector:
app: 1-service
ports:
- name: http
port: 80
targetPort: 80
这是用于 Traefik 服务的配置,它将请求发送到不同的命名空间:
services:
1-service:
loadBalancer:
servers:
- url: http://1-service.1-service.svc.cluster.local:80
# - url: http://1-service.1-service:80 # This should work perfectly as well, didn't test it explicitly
您可能已经知道了,您可以使用 SERVICE.NAMESPACE
表示法而不是 SERVICE
来引用来自不同命名空间的服务,<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
<item id='my-img' href='images/dp.jpg' media-type='image/jpeg'/
>
</note>
会自动假定您正在引用当前命名空间中的服务.