在同一个 kubernetes 集群上安装两个 traefik 入口控制器

kad*_*amb 4 security kubernetes traefik kubernetes-ingress traefik-ingress

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

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

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

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

kad*_*amb 9

为了部署两个单独的 traefik-ingress 控制器,分别为私人和公共流量提供服务,我使用了kubernetes.ingressclass=traefikargs。

这就是文档的内容kubernetes.ingressclass

--kubernetes.ingressclass  Value of kubernetes.io/ingress.class annotation to watch for
Run Code Online (Sandbox Code Playgroud)

我创建了两个部署,具有单独的值kubernetes.ingressclass.

一个kubernetes.ingressclass=traefik,它是公共 ALB 背后的并且kubernetes.ingressclass=traefik-internal,它位于私有/内部 ALB 后面

对于我想要私下提供的服务,我在入口对象中使用以下注释:

annotations:
    kubernetes.io/ingress.class: traefik-internal
Run Code Online (Sandbox Code Playgroud)

并为公众

annotations:
  kubernetes.io/ingress.class: traefik
Run Code Online (Sandbox Code Playgroud)

我的部署.yaml

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: traefik-internal-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-internal-ingress-lb
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: traefik-internal-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-internal-ingress-lb
    spec:
      serviceAccountName: traefik-internal-ingress-controller
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik:v1.7
        name: traefik-internal-ingress-lb
        ports:
        - name: http
          containerPort: 80
        - name: admin
          containerPort: 8080
        args:
        - --api
        - --kubernetes
        - --logLevel=INFO
        - --accesslog=true
        - --kubernetes.ingressclass=traefik-internal ##this makes it to watch only for ingress objects with annotaion "kubernetes.io/ingress.class: traefik-internal"
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助。