Ingress实现黑白名单

2023-05-05 10:04:36 浏览数 (1)

在Kubernetes集群中,Ingress是用于暴露HTTP和HTTPS服务的一种资源类型。它可以根据域名、路径和端口将流量路由到不同的服务,为开发人员提供了便利。Ingress控制器支持通过配置黑白名单来控制哪些IP地址可以访问服务。

创建Deployment和Service

首先,我们需要创建一个Deployment和一个Service,用于提供一个HTTP服务。这里我们创建一个名为“my-service”的Deployment和一个Service,并将它们暴露在80端口上。

代码语言:javascript复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-service
spec:
  selector:
    matchLabels:
      app: my-service
  replicas: 2
  template:
    metadata:
      labels:
        app: my-service
    spec:
      containers:
      - name: my-service
        image: nginx:1.19.10
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-service
  ports:
  - name: http
    port: 80
    targetPort: 80
  type: ClusterIP

创建Ingress规则

接下来,我们创建一个Ingress规则,用于将流量路由到“my-service”服务上。这里我们使用一个名为“example.com”的域名,并将流量路由到“/”路径。

代码语言:javascript复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.0.0/16,10.0.0.0/8"
spec:
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: my-service
          servicePort: http

在上面的代码中,我们使用了一个名为“nginx.ingress.kubernetes.io/whitelist-source-range”的注释来实现黑白名单。该注释允许您配置允许或拒绝的IP地址范围。在本例中,我们允许IP地址以“192.168.0.0/16”和“10.0.0.0/8”开头的请求访问服务。

验证

现在我们已经创建了Ingress规则,可以测试它是否工作。我们可以使用curl命令模拟一个HTTP请求,并通过指定一个不在允许列表中的IP地址来测试黑白名单。

代码语言:javascript复制
$ curl -H "Host: example.com" http://<ingress-ip-address>/ --header "X-Forwarded-For: 172.16.0.1"

在上面的命令中,我们使用了“X-Forwarded-For”标头来模拟一个不在允许列表中的IP地址。在实际环境中,该标头将由Ingress控制器自动添加。如果一切正常,您将看到一个类似于“403 Forbidden”的响应。

另外,您也可以通过使用允许的IP地址来测试黑白名单。在这种情况下,您将收到一个HTTP 200响应。

代码语言:javascript复制
$ curl -H "Host: example.com" http://<ingress-ip-address>/ --header "X-Forwarded-For: 192.168.0.1"

在上面的命令中,我们使用了一个在允许列表中的IP地址,您应该能够看到服务的输出。

0 人点赞