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