首页 > 解决方案 > 在同一个 kubernetes 集群上安装两个 traefik 入口控制器

问题描述

我有一种情况,我打算在 Kubernetes 集群中使用两个单独的 traefik 入口控制器。

我有一些 URL,我希望只能通过 VPN 访问,而很少有可以公开访问的 URL。

在当前架构中,我有一个 traefik-ingress 控制器和两个独立的 ALB,一个内部的和一个面向互联网的,都指向 traefik。
假设我有一个 URLpublic.example.comprivate.example.com. public.example.com指向面向 Internet 的 ALB,并且private.example.com指向内部 ALB。但是如果有人知道他的指向public.example.com和指向private.example.com相同的指向/etc/hosts,他将能够访问我的私人网站。

为了避免这种情况,我计划运行两个单独的 traefik-ingress-controller,一个只提供私有 URL,一个提供公共 URL。这可以做到吗?或者有没有其他方法可以避免这种情况

标签: securitykuberneteskubernetes-ingresstraefiktraefik-ingress

解决方案


您可以使用集群内的单个 Ingress 控制器来实现这一点,但可以通过创建各种IngressKubernetes 对象来实现。

对于私有站点:- 考虑whitelist-source-range入口资源中的注释。

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#whitelist-source-range

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: 10.0.0.0/24,172.10.0.1
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          serviceName: test
          servicePort: 80

对于公共网站:-

https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - path: /testpath
        pathType: Prefix
        backend:
          serviceName: test
          servicePort: 80

推荐阅读