[英]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.