如何限制访问 kubernetes 服务的 IP 地址?

How to limit IP Addresses that have access to kubernetes service?

有什么方法可以限制集群外对LoadBalancer类型的Kubernetes Service的访问吗?

我想使用只能通过我的外部 IP 地址访问的 LoadBalancer 服务将我的数据库的 pod 公开到 Internet。

我的 Kubernetes 集群在 GKE 上运行。

是的,您可以使用原生 Kubernetes Network Policy 在 Kubernetes 级别实现这一点。在那里,您可以通过为 Ingress 类型指定策略来​​限制进入 Kubernetes 服务的入口流量。 例如:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    ports:
    - protocol: TCP
      port: 6379

更多信息可以在官方documentation中找到。

如果您已经想在负载均衡器级别阻止来自不需要的 IP 地址的流量,则必须定义防火墙规则并将它们应用于 GCP 负载均衡器。 有关 GCP 防火墙规则的更多信息也可以在 documentation.

中找到

您可以使用 loadBalancerSourceRanges 过滤负载均衡流量,如前所述 here

下面是 Nginx Ingress controller 前面的 Service 的简单例子:

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: external
    app.kubernetes.io/name: ingress-nginx
  name: external-ingress-nginx-controller
  namespace: kube-ingress
spec:
  loadBalancerSourceRanges:
  - <YOUR_IP_1>
  - <YOUR_IP_2>
  - <YOUR_IP_3>
  ports:
  - name: https
    nodePort: 32293
    port: 443
    targetPort: https
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: external
    app.kubernetes.io/name: ingress-nginx
  type: LoadBalancer