kubernetes公开了Traefik 2.x的服务作为CRD的入口

我在做什么

我有一个Kubernetes集群,如下所示:

  • 单个控制平面(但计划将其扩展到HA的3个控制平面)
  • 2个工作节点



我在此群集上进行了部署(遵循traefik https://docs.traefik.io/user-guides/crd-acme/的文档):

  • 创建两个pod的部署:

    • traefik本身:它将负责使用暴露的端口80、8080进行路由
    • whoami:响应http请求的简单http服务器
  • 两项服务

    • traefik服务:

      kubernetes公开了Traefik 2.x的服务作为CRD的入口

    • 电话服务:

      kubernetes公开了Traefik 2.x的服务作为CRD的入口

  • 一条traefik入口路由:

    kubernetes公开了Traefik 2.x的服务作为CRD的入口

我想要什么

我在集群中运行了多个服务,我想使用Ingress将它们暴露给外部。 更准确地说,我想使用新的 Traefik 2.x cdr进入方法。

我的最终目标是使用新的traefiks 2.x CRD通过IngressRoute自定义资源定义公开端口80、443、8080上的资源

出了什么问题

如果我理解得很好,经典的Ingress控制器可以将我们想要的每个端口公开给外界(包括80、8080和443)。

但是使用新的traefik cdr进入方法本身就不会输出任何东西。 一种解决方案是将Traefik服务定义为负载平衡器类型的服务,然后公开一些端口。但是您被迫使用30000-32767端口范围(与nodeport相同),并且我不想在反向代理之前添加反向代理以能够公开端口80和443 ...

我还从新的igress CRD(https://docs.traefik.io/user-guides/crd-acme/)的文档中得出以下种子:

kubectl port-forward --address 0.0.0.0 service/traefik 8000:8000 8080:8080 443:4443 -n default

是必需的,我现在明白了。您需要将主机端口映射到服务端口。 但是以这种方式映射端口会感到笨重并且与直观性背道而驰。我不想在yaml中包含服务描述的一部分,同时必须记住我需要使用kubectl映射端口。

我很确定有一个简洁,简单的解决方案来解决这个问题,但是我不明白如何使事情保持简单。你们是否有使用traefik 2.x CRD配置的Kubernetes经验?

violawu 回答:kubernetes公开了Traefik 2.x的服务作为CRD的入口

apiVersion: v1
kind: Service
metadata:
  name: traefik

spec:
  ports:
    - protocol: TCP
      name: web
      port: 80
      targetPort: 8000
    - protocol: TCP
      name: admin
      port: 8080
      targetPort: 8080
    - protocol: TCP
      name: websecure
      port: 443
      targetPort: 4443
  selector:
    app: traefik

您尝试过使用tragetPort,其中每个请求都在80时重定向到8000,但是当您使用端口转发时,您需要始终使用服务而不是pod

,

您可以尝试使用LoadBalancer服务类型在端口80、443和8080上公开Traefik服务。我已经从GKE中提供的链接中测试了Yaml,并且可以使用。

您需要更改“ traefik”服务上的端口并添加“ LoadBalancer”作为服务类型:

kind: Service
metadata:
  name: traefik
spec:
  ports:
    - protocol: TCP
      name: web
      port: 80 <== Port to receive HTTP connections
    - protocol: TCP
      name: admin
      port: 8080 <== Administration port
    - protocol: TCP
      name: websecure
      port: 443 <== Port to receive HTTPS connections
  selector:
    app: traefik
  type: LoadBalancer <== Define the type load balancer

Kubernetes将为您的服务创建一个Loadbalancer,您可以使用端口80和443访问应用程序。

$ curl https://35.111.XXX.XX/tls -k
Hostname: whoami-5df4df6ff5-xwflt
IP: 127.0.0.1
IP: 10.60.1.11
RemoteAddr: 10.60.1.13:55262
GET /tls HTTP/1.1
Host: 35.111.XXX.XX
User-Agent: curl/7.66.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.60.1.1
X-Forwarded-Host: 35.111.XXX.XX
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Forwarded-Server: traefik-66dd84c65c-4c5gp
X-Real-Ip: 10.60.1.1

$ curl http://35.111.XXX.XX/notls   
Hostname: whoami-5df4df6ff5-xwflt
IP: 127.0.0.1
IP: 10.60.1.11
RemoteAddr: 10.60.1.13:55262
GET /notls HTTP/1.1
Host: 35.111.XXX.XX
User-Agent: curl/7.66.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.60.1.1
X-Forwarded-Host: 35.111.XXX.XX
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: traefik-66dd84c65c-4c5gp
X-Real-Ip: 10.60.1.1
,

好一会儿之后,我决定在kubernetes集群的前面放一个haproxy。这似乎是唯一的ATM解决方案。

本文链接:https://www.f2er.com/2812993.html

大家都在问