Kubernetes Ingress 白名单

在云原生架构中,Kubernetes 已经成为一种广泛使用的容器编排平台。Kubernetes Ingress 作为其核心组件之一,提供了对外的访问控制和流量管理。但是,有时我们需要更细粒度的安全控制,例如将访问权限限制在某些特定 IP 地址或 IP 范围内。本文将为大家介绍如何在 Kubernetes 中配置 Ingress 的白名单,确保只有指定的 IP 能够访问我们的服务。

什么是 Kubernetes Ingress?

Kubernetes Ingress 是一个 API 对象,管理外部用户如何访问集群内的服务。它提供基于 HTTP 的路由规则,可以将流量分别转发到不同的服务上。Ingress 通过 Ingress Controller 来工作,这意味着你必须先部署一个 Ingress Controller(如 NGINX、Traefik 等)以便处理 Ingress 资源。

创建 Ingress 的白名单

要配置 Ingress 的白名单,首先,你需要在你的 Kubernetes 集群中部署一个 Ingress Controller。接下来,利用 ConfigMap 来定义允许访问的 IP 地址,然后通过 Ingress 资源关联来创建白名单。下面是实现步骤的流程图:

flowchart TD
    A[创建 Ingress Controller] --> B[创建 ConfigMap]
    B --> C[创建 Ingress 资源]
    C --> D[验证白名单]

步骤 1: 创建 Ingress Controller

以 NGINX Ingress Controller 为例,你可以通过以下命令快速部署:

kubectl apply -f 

步骤 2: 创建 ConfigMap

创建一个 ConfigMap 来定义允许的 IP 地址。在下面的示例中,我们允许 "192.168.1.0/24" 和 "10.0.0.5" 的 IP 地址访问我们的服务:

apiVersion: v1
kind: ConfigMap
metadata:
  name: ingress-whitelist
  namespace: ingress-nginx
data:
  whitelist-source-range: "192.168.1.0/24,10.0.0.5"

运行以下命令创建 ConfigMap:

kubectl apply -f configmap.yaml

步骤 3: 创建 Ingress 资源

接下来,创建一个 Ingress 资源,关联之前创建的 ConfigMap。以下是示例代码:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/whitelist-source-range: "192.168.1.0/24,10.0.0.5"
spec:
  rules:
    - host: myapp.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

运行以下命令创建 Ingress 资源:

kubectl apply -f ingress.yaml

步骤 4: 验证白名单

通过访问 myapp.example.com,你现在可以测试 IP 白名单。如果请求来自允许的 IP 地址,它会成功访问服务;反之,则会返回 403 Forbidden。

访问过程的序列图

以下是访问过程的序列图,展示了用户请求如何经过 Ingress Controller 和白名单验证:

sequenceDiagram
    participant User
    participant IngressController
    participant Service
    User->>IngressController: 发送请求
    IngressController->>User: 检查 IP 白名单
    alt IP 在白名单内
        IngressController->>Service: 转发请求
        Service->>IngressController: 返回响应
        IngressController->>User: 返回响应
    else IP 不在白名单内
        IngressController->>User: 403 Forbidden
    end

结论

在 Kubernetes 中配置 Ingress 的白名单是保证服务安全性的重要措施。通过简单的步骤创建 Ingress Controller、ConfigMap 和 Ingress 资源,你就可以有效地限制访问权限。这样一来,只有被允许的 IP 地址才能访问你的服务,防止潜在的安全威胁。

记住定期更新白名单以及监控访问日志,以确保授权访问始终符合实际需求。结合 Kubernetes 的强大功能,运用合理的安全策略,可以让我们的应用更加稳健与安全。希望本文能帮助到有需要的开发者和运维人员!