簡體   English   中英

Traefik IngressRoute CRD 沒有注冊任何路由

[英]Traefik IngressRoute CRD not Registering Any Routes

我正在將 Traefik Proxy 配置為在 GKE 集群上運行以處理對各種微服務的代理。 我正在通過他們的 CRD 做所有事情,並使用自定義部署將 Traefik 部署到集群。 Traefik 儀表板可以訪問並且工作正常,但是當我嘗試為服務本身設置 IngressRoute 時,它不可訪問並且沒有出現在儀表板中。 我嘗試使用常規的 k8s Ingress object 進行設置,這樣做時,它確實出現在儀表板中,但是我遇到了一些中間件問題,為了易於使用,我更喜歡 go CRD 路由. 此外,微服務的部署和服務似乎部署良好,它們都出現在 GKE 儀表板中並且運行正常。 沒有創建入口,但是我不確定自定義 CRD IngressRoute 是否應該創建一個。

有關配置的一些信息:
我正在使用 Kustomize 來處理疊加層和一般數據
我通過 kustomize 進行設置,將命名空間users應用於所有內容

下面是我正在使用的配置文件,CRD 和 RBAC 是通過調用定義的

kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.9/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.9/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml

部署.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: users-service
spec:
  replicas: 1
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: users-service
    spec:
      containers:
        - name: users-service
          image: ${IMAGE}
          imagePullPolicy: IfNotPresent

          ports:
            - name: web
              containerPort: ${HTTP_PORT}

          readinessProbe:
            httpGet:
              path: /ready
              port: web
            initialDelaySeconds: 10
            periodSeconds: 2

          envFrom:
            - secretRef:
                name: users-service-env-secrets

服務.yml

apiVersion: v1
kind: Service
metadata:
  name: users-service
spec:
  ports:
    - name: web
      protocol: TCP
      port: 80
      targetPort: web
  selector:
    app: users-service

入口.yml

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: users-stripprefix
spec:
  stripPrefix:
    prefixes:
      - /userssrv
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: users-service-ingress
spec:
  entryPoints:
    - service-port
  routes:
    - kind: Rule
      match: PathPrefix(`/userssrv`)
      services:
        - name: users-service
          namespace: users
          port: service-port
      middlewares:
        - name: users-stripprefix

如果需要更多信息,請 lmk。 謝謝!

Kube.netes 上的默認 Traefik 安裝會創建兩個入口點:

  • web用於 http 訪問,以及
  • 用於websecure訪問的網絡安全

但是您的IngressRoute配置中有:

entryPoints:
    - service-port

除非您已明確配置 Traefik 具有名為“服務端口”的入口點,否則這可能是您的問題。 您想要刪除entryPoints部分,或指定如下內容:

entryPoints:
  - web

如果省略entryPoints配置,該服務將在所有入口點上可用。 如果您包含顯式入口點,則該服務將僅在那些特定入口點可用(例如,使用上述配置,該服務將通過http://而不是通過https://可用)。


與您的問題沒有直接關系,但如果您使用的是 Kustomize,請考慮:

  • 從部署、服務選擇器等中刪除app: users-service label,然后使用commonLabels指令在您的kustomization.yaml中設置它。

  • 從 IngressRoute 中的服務規范中刪除顯式命名空間,而是使用 kustomize 的命名空間轉換器來設置它(這使您可以從kustomization.yaml中專門控制命名空間)。

我將一個可部署的示例與此答案中提到的所有更改放在一起here

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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