[英]Route traffic to a service in a different namespace with Traefik and Kubernetes
使用 Traefik 作为入口控制器(在 GCP 中的 kube 集群上)。 是否可以创建使用来自不同命名空间的后端服务的入口规则?
我们为每个“主要”版本的代码都有一个命名空间。
1-service.com -> 1-service.com ingress in the 1-service ns -> 1-service svc in the same ns
2-service.com -> 2-service.com ingress in the 2-service ns...等等
我还想要“未版本化”命名空间中的另一个入口规则,它将流量路由到一个主要版本。
service.com -> service.com ingress 在“service” ns -> X-service 命名空间中的 X-service
我想使用版本化主机名(1-service.com 等)在 k8s 中保持主要版本分开,但仍然有一个指向最新版本的“最新”版本。
我相信 voyager 可以做跨命名空间入口 -> svc。 Traefik 也可以吗??
您可以使用这样的解决方法:
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: /
刚刚在 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
来引用来自不同命名空间的SERVICE
,它会自动假定您正在引用当前命名空间中的服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.