如何使用Traefik Ingress Controller将IP列入白名单

1,050 阅读2分钟

嗨,读者朋友们,在这篇博客中,我们将看到如何使用Traefik入口控制器对IP进行白名单。在这篇博客中,我们使用Traefik ingress控制器的第二版,将服务暴露在互联网上,被白名单的IP只有这些IP能够访问你的域名。

什么是IP白名单?

IP白名单允许你创建IP地址或IP范围的列表,你的用户可以从这些地址访问你的域名。它提供了一个安全功能,通常用于控制和限制只有受信任的用户才能访问。

什么是Traefik?

Traefik是一个开源的最受欢迎的入口控制器,用于将服务暴露在互联网上。它接收请求,并找到该请求所需的服务。Traefik与所有主要的集群技术兼容,如Kubernetes、Docker、Docker Swarm、AWS、Mesos、Marathon等。

创建一个部署

现在,我们首先要用一个简单的网络应用程序镜像创建一个部署对象。我将在一个名为traefik的命名空间中进行部署,你可以在默认命名空间中进行部署。要创建一个命名空间,请使用以下命令

$ kubectl create namespace <namespace_name>
apiVersion: apps/v1 
kind: Deployment
metadata:
  name: my-app
  namespace: traefik
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: my-app
  replicas: 1 
  template: 
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: ahmad33/maintenance:1.02
        ports:
        - containerPort: 80

现在首先使用kubectl命令部署。

$ kubectl create -f <deployment-file-name>

创建一个用于部署的服务

现在我们将创建一个服务,由traefik ingress控制器为我的Web应用提供服务。

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
  namespace: traefik
  labels:
    app: my-app
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: my-app
  type: ClusterIP

现在使用kubectl命令创建服务。

$ kubectl create -f <service-file-name>

创建一个中间件对象

因此,为了白名单IP,我们将使用Kubernetes中间件对象,我们将在其中定义SourceRange IPs用于白名单。

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: test-ipwhitelist
  namespace: traefik
spec:
  ipWhiteList:
    sourceRange:
       - 192.168.43.203
       - 172.28.0.1/32

使用Kubectl命令来创建基于上述配置的中间件。

$ kubectl create -f <middleware-file-name>

创建Ingress对象

现在我们将创建一个Kubernetes入口对象,其中我们将添加两个注释, 第一个是将traefik的入口类,第二个将是我们已经创建的中间件。此外,我们还将为我们的服务定义一些路由规则。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ip-whitelist
  namespace: traefik
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.ingress.kubernetes.io/router.middlewares: traefik-test-ipwhitelist@kubernetescrd
spec:
  rules:
    - host: test.whitelist.com
      http:
        paths:
           - path: /
             pathType: Prefix
             backend:
                  service:
                     name: nginx
                     port:
                       number: 80

现在使用kubectl命令创建ingress对象。

$ kubectl create -f <ingress-file-name>

等待地址,并在 /etc/hosts 文件中将IP地址映射为URL。

现在去你的浏览器,点击你的域名。通过在SourceRange部分的中间件对象中改变IP,你可以进行测试。

结语

在这篇博客中,我们看到了如何在使用traefik ingress控制器时对IP进行白名单。