标签: traefik-ingress

Kubernetes Ingress 和 IngressRoute 有什么区别?

我仍在学习 kubernetes,并且偶然发现了对象“Ingress”和“IngressRoute”。这两个对象有什么不同?IngressRoute 是否取代了“旧”的 Ingress?我正在使用 Traefik 2.1 运行 Kubernetes Cluster V1.17。我的 IngressRoute 工作正常,但我也找到了解释如何定义入口的博客。

kubernetes traefik-ingress

13
推荐指数
2
解决办法
4874
查看次数

Kubernetes 上的 Traefik 在传入连接上错误的客户端 IP

我在 Kubernetes 上运行 Traefik,并使用以下配置创建了一个 Ingress:

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: whitelist-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefix
    traefik.ingress.kubernetes.io/whitelist-source-range: "10.10.10.10/32, 10.10.2.10/23"
    ingress.kubernetes.io/whitelist-x-forwarded-for: "true"
    traefik.ingress.kubernetes.io/preserve-host: "true"
spec:
  rules:
  - host:
    http:
      paths:
      - path: /endpoint
        backend:
          serviceName: endpoint-service
          servicePort: endpoint-port
---
Run Code Online (Sandbox Code Playgroud)

当我在上述端点上执行 POST 时,Traefik 记录传入 IP 为 172.16.0.1,因此未触发我的白名单。做一个 ifconfig 我看到 IP 属于 Docker

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.26.0.1  netmask 255.255.0.0  broadcast 172.26.255.255
Run Code Online (Sandbox Code Playgroud)

如何保留原始 IP 而不是 docker IP?

编辑

Traefik 作为 LoadBalancer 公开,端口是 443 通过 SSL

这是它的yml配置

---
kind: Service
apiVersion: …
Run Code Online (Sandbox Code Playgroud)

networking docker kubernetes traefik traefik-ingress

8
推荐指数
1
解决办法
3853
查看次数

对于 k3s 中的 Traefik Ingress Controller,禁用 TLS 验证

我正在使用 k3s 的默认安装(版本 v1.17.0+k3s.1)并验证它在我的 Raspberry Pi 集群上正常工作。

使用推荐的说明(https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/)安装 kubernetes-dashboard后,我确认这是有效的,在我使用 k3s 将它暴露在集群之外之后基于 traefik 的负载均衡器。

但是,当我尝试使用 traefik 入口控制器公开它时,我无法连接到 kubernetes 仪表板,浏览器显示 HTTP 500 错误,即内部服务器错误。下面是我的入口 yaml 和 kubernetes-dashboard pod 日志,显示了 TLS 证书错误。我相信证书错误是由于 traefik 不知道(和信任)kubernetes 仪表板使用的 TLS 证书。

一种。k8s-dashboard-Ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  rules:
    - host: k8s-services
      http:
        paths:
          - path: /k8s-dashboard
            backend:
              serviceName: kubernetes-dashboard
              servicePort: 443
Run Code Online (Sandbox Code Playgroud)

笔记。域“k8s-services”域在我的 pi 集群机器和浏览计算机主机文件中定义。

湾 Kubernetes 仪表板 pod 日志

...
2020/01/18 06:04:19 Auto-generating …
Run Code Online (Sandbox Code Playgroud)

kubernetes-dashboard traefik-ingress k3s

8
推荐指数
1
解决办法
2689
查看次数

Traefik v2.2 入口路由示例不起作用

我正在尝试使用https://docs.traefik.io/routing/providers/kubernetes-crd/提供的配置设置 traefik 入口路由

我可以看到 traefik 已启动并正在运行,也可以看到仪表板。但是我在仪表板上看不到 whoami 服务,也无法通过 url 访问它。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

文件

# All resources definition must be declared
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: ingressroutes.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: IngressRoute
    plural: ingressroutes
    singular: ingressroute
  scope: Namespaced

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: middlewares.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: Middleware
    plural: middlewares
    singular: middleware
  scope: Namespaced

---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: ingressroutetcps.traefik.containo.us

spec:
  group: traefik.containo.us
  version: v1alpha1
  names:
    kind: IngressRouteTCP
    plural: …
Run Code Online (Sandbox Code Playgroud)

kubernetes traefik kubernetes-ingress traefik-ingress

8
推荐指数
1
解决办法
8699
查看次数

Traefik:仅为特定文件添加自定义标题

更新: ATM 这不能通过 traefik 实现。我有一个问题:https : //github.com/containous/traefik/issues/4228

我想向cache-control具有Content/Type application/json和 的文件添加标题image/png

ATM 目前前进的方式是使用自定义响应头。

kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/custom-response-headers: Cache-Control: private || Cache-Control: max-age=31536000
Run Code Online (Sandbox Code Playgroud)

下面是路径配置:

spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: myabc
          servicePort: 443
        path: /myabc
      - backend:
          serviceName: myxyz
          servicePort: 443
        path: /myxyz
Run Code Online (Sandbox Code Playgroud)

我只希望在请求 .js 或 .png 等静态文件时应用自定义标头。

关于如何前进的任何指示?这可能通过traefik吗?

kubernetes traefik traefik-ingress

7
推荐指数
0
解决办法
680
查看次数

在 traefik 入口中向微服务根路径添加尾部斜杠

Traefik 入口控制器已经支持traefik.frontend.rule.type: PathPrefixStrip相当长一段时间了,当微服务的根路径需要在example.com/path/.

\n\n

以下是带有清单的 yaml 示例:

\n\n
apiVersion: extensions/v1beta1\nkind: Ingress\nmetadata:\n  name: example\n  annotations:\n    traefik.frontend.rule.type: PathPrefixStrip\nspec:\n  rules:\n  - host: example.com\n    http:\n      paths:\n      - path: /path/\n        backend:\n          serviceName: example\n          servicePort: http\n
Run Code Online (Sandbox Code Playgroud)\n\n

这种方法的问题在于,当客户端转到 \xe2\x80\x93 时,它不会添加尾部斜杠(example.com/path如果我理解正确的话),这只能通过额外的入口规则来实现。

\n\n

traefik 的最新版本支持更广泛的注释集,这表明可以在一个规则内声明添加尾部斜杠。

\n\n

这是我在 traefik 中解决这个问题的尝试1.7

\n\n
apiVersion: extensions/v1beta1\nkind: Ingress\nmetadata:\n  name: example\n  annotations:\n    traefik.ingress.kubernetes.io/redirect-permanent: "true"\n    traefik.ingress.kubernetes.io/redirect-regex: https?://example.com/path$\n    traefik.ingress.kubernetes.io/redirect-replacement: https://example.com/path/\n    traefik.ingress.kubernetes.io/request-modifier: "ReplacePathRegex: ^/path/(.*) /$1"\nspec:\n  rules:\n  - host: example.com\n    http:\n      paths:\n      - path: /path\n        backend:\n          serviceName: example\n          servicePort: http\n …
Run Code Online (Sandbox Code Playgroud)

traefik traefik-ingress

6
推荐指数
0
解决办法
2970
查看次数

Kubernetes入口中基于Traefik路径的路由无法按预期工作

我正在尝试使用Kubernetes中Traefik入口控制器提供的基于路径的路由机制,但URL重写存在一些问题。

我的[更新]配置如下

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/auth-type: "basic"
    traefik.ingress.kubernetes.io/auth-tls-insecure: "true"
    traefik.ingress.kubernetes.io/frontend-entry-points: "http,https"
    traefik.ingress.kubernetes.io/app-root: "/"
    traefik.ingress.kubernetes.io/rule-type: "PathPrefixStrip"
    traefik.ingress.kubernetes.io/rewrite-target: "/"
  name: webapp-ingress
  namespace: my-company
spec:
  rules:
   - host: local-ubuntu
   - http:
      paths:
      - path: /
        backend:
          serviceName: webapp
          servicePort: 80
      - path: /db
        backend:
          serviceName: db-manager
          servicePort: 8081
Run Code Online (Sandbox Code Playgroud)

流量被路由到正确的服务,但是当我查看db-manager(kubernetes)服务的日志时,URL仍带有/ db前缀。我对PathPrefixStrip的预期是,流量将不带/ db前缀路由到运行db-manager微服务的容器,该容器正在后端监听/(http:// db-manager:8081)侧。

我想念什么吗?是traefik支持还是仅nginx支持?预先感谢您的反馈。

[编辑]

更具体地说,我将在下面讨论的当前注释中观察以下内容

  • traefik.ingress.kubernetes.io/rule-type:“ PathPrefixStrip”
  • traefik.ingress.kubernetes.io/rewrite-target:“/”

网址:http:// local-ubuntu / db [确定]-> 200

然后其他资源正在加载,但指向错误的基本URL

例:

资源URL是:http://local-ubuntu/public/css/bootstrap.min.css

但这应该是:http://local-ubuntu/db/public/css/bootstrap.min.css (当我手动尝试时可以使用)

我不确定当前配置中缺少的内容。

traefik kubernetes-ingress traefik-ingress

6
推荐指数
1
解决办法
1536
查看次数

使用 traefik 作为 DaemonSet 还是部署?

我应该将 traefik 1.7.x 部署为 DaemonSet 还是 GKE (Google K8S) 中的部署?

环境描述

Google 云中具有节点自动缩放器的 Kubernetes 集群,托管多个生产集群。集群最多可以扩展 90 个节点(最少 6 个节点),目前我们traefik在每个集群中部署了 10 个副本的 pod(我们使用 kustomize 在所有集群中部署相同的清单)。

europe-west1我们注意到,与具有 6 个节点的区域集群相比,具有 18 个节点(区域)的集群的响应时间较慢australia-southeast1。两个集群都有 10 个 traefik 副本。

部署规格

traefik.toml:

    [kubernetes]
    # all namespaces!
    namespaces = []
Run Code Online (Sandbox Code Playgroud)

服务.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: traefik
  name: traefik-ingress
  namespace: ingress-traefik
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP …
Run Code Online (Sandbox Code Playgroud)

kubernetes google-kubernetes-engine traefik traefik-ingress

6
推荐指数
1
解决办法
2317
查看次数

Traefik 仪表板:Ingress 和 IngressRoute,它们可以共存吗?

最近我正在将一个项目转移到 Kubernetes 并使用 Traefik 作为入口控制器。对于 Traefik,我使用了 Traefik Ku​​bernetes Ingress 提供程序进行路由。当我尝试添加 Traefik 仪表板时,我发现它似乎只能使用 IngressRoute 添加(即使用 Kubernetes CRD 作为提供程序)。

我有几个问题:

  • 是否可以使用 Traefik Ku​​bernetes Ingress provider 来显示仪表板?
  • 我可以同时使用 kubernetesingress 和 kubernetescrd 作为提供者吗?Ingress 和 IngressRoute 可以共存吗?

kubernetes traefik kubernetes-ingress traefik-ingress

6
推荐指数
1
解决办法
3285
查看次数

使用 Traefik 和 DigitalOcean 获取 Kubernetes Pod 的真实 IP

我正在尝试使用 traefik 获取 Kubernetes pod 的真实源 IP 地址。我正在使用启用了代理协议的数字海洋负载均衡器。我还配置了 K8s 服务 yaml,将外部流量策略设置为本地。

从我的 K8s 中的 Traefik Ingress configmap 中摘录。我已经编辑了我的实际 IP,但我使用我的负载均衡器 IP 和 Kubernetes 工作节点专用 IP

  [entryPoints]
      [entryPoints.http]
        address = ":80"

        compress = true
        [entryPoints.http.redirect]
        entryPoint = "https"
      [entryPoints.https]

        address = ":443"
        compress = true
        [entryPoints.https.tls]
          [[entryPoints.https.tls.certificates]]
          CertFile = "/ssl/client_co.crt"
          KeyFile = "/ssl/tls.key"
        [entryPoints.https.proxyProtocol]
          trustedIPs = ["Load Balancer IP, Kubernetes Worker Node IPs"]


      [entryPoints.https.redirect]
        regex = "^https://(?:www\\.)(.*)"
        replacement = "https://$1"
        permanent = true
Run Code Online (Sandbox Code Playgroud)

这是部署文件服务yaml的一部分

  kind: Service
    apiVersion: v1
    metadata:
      name: traefik-ingress-service …
Run Code Online (Sandbox Code Playgroud)

digital-ocean kubernetes real-ip traefik traefik-ingress

5
推荐指数
0
解决办法
3542
查看次数