簡體   English   中英

使用 Traefik 和 Kubernetes 將流量路由到不同命名空間中的服務

[英]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 也可以嗎??

您可以使用這樣的解決方法:

  1. 當你想創建一個入口時,在你的命名空間中創建一個類型為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
  1. 創建一個指向此服務的入口:
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM