Traefik IngressRoute CRD not Registering Any Routes



我正在配置Traefik Proxy在GKE集群上运行,以处理各种微服务的代理。我通过他们的crd完成所有工作,并使用自定义部署将Traefik部署到集群。Traefik仪表板是可访问的,工作正常,但是当我试图为服务本身设置IngressRoute时,它是不可访问的,并且它没有出现在仪表板中。我试过用常规的k8s入口对象设置它,当这样做时,它确实出现在仪表板中,但是我遇到了一些中间件问题,为了便于使用,我更喜欢走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

deployment.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

service.yml

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

ingress.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

如果需要更多的信息,请点击。谢谢!

在Kubernetes上默认安装Traefik会创建两个入口点:

  • web用于http访问,
  • websecure用于https访问

但是在IngressRoute配置中有:

entryPoints:
- service-port

除非您显式地为Traefik配置了一个名为"service-port"的入口点,否则这可能是您的问题。您想要删除entryPoints部分,或者指定如下内容:

entryPoints:
- web

如果省略entryPoints配置,该服务将在所有入口点上可用。如果您包含显式入口点,那么服务将仅在这些特定入口点上可用(例如,使用上述配置,服务将通过http://而不是通过https://可用)。


与您的问题没有直接关系,但如果您正在使用Kustomize,请考虑:

  • 从部署、服务选择器等中删除app: users-service标签,并使用commonLabels指令在kustomization.yaml中设置它。

  • 从IngressRoute的服务规范中删除显式名称空间,而使用自定义的名称空间转换器来设置它(这让您可以从kustomization.yaml独占地控制名称空间)。

我已经把这个答案中提到的所有更改都放在了一个可部署的示例中。

相关内容

  • 没有找到相关文章

最新更新