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



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

我有一些URL,我只想通过VPN访问,还有一些可以公开访问。

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

为了避免这种情况,我计划运行两个独立的traefik入口控制器,其中一个将只提供私有URL和一个公共URL。这能做到吗?或者有没有其他方法可以避免这种

为了部署两个独立的traefik入口控制器,分别为私有和公共流量提供服务,我使用了kubernetes.ingressclass=traefik参数。

这就是文档对kubernetes.ingressclass:的描述

--kubernetes.ingressclass  Value of kubernetes.io/ingress.class annotation to watch for

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

一个是kubernetes.ingressclass=traefik,它在公共ALB后面,而kubernetes.ingressclass=traefik-internal,它在私人/内部ALB 后面

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

annotations:
kubernetes.io/ingress.class: traefik-internal

对于公共

annotations:
kubernetes.io/ingress.class: traefik

我的部署。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"

希望这能帮助到别人。

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

对于私人网站:-考虑入口资源中的CCD_ 14注释。

https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#whitelist-源距离

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-入口资源

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

多个Træfik部署可以在同一集群中同时运行。例如,可以想象一个Deployment处理内部流量,另一个处理外部流量。

对于这种情况,建议通过标签对Ingress对象进行分类,并相应地为每个Træfik部署配置labelSelector选项。为了坚持上面的内部/外部示例,所有用于内部流量的Ingress对象都可以接收traffic-type: internal标签,而指定用于外部流量的对象接收traffic-type: external标签。Træfik Deployments上的标签选择器将分别为traffic-type=internal和traffic-type=external

相关内容

  • 没有找到相关文章

最新更新