也许您对 kube-proxy 和 istio 感到困惑,默认情况下 Kubernetes 使用 kube-proxy,但您可以安装 istio,为每个 pod 注入一个新代理,以控制到 pod 内服务的双向流量。
话虽如此,您可以在集群上安装 istio 并仅为您需要的服务启用它,并使用 istio 机制应用黑名单
https://istio.io/docs/tasks/policy-enforcement/denial-and-list/
要使用源 IP 创建黑名单,我们必须让 istio 管理如何获取源 IP 地址并使用从文档中获取的 som 配置:
apiVersion: config.istio.io/v1alpha2
kind: handler
metadata:
name: whitelistip
spec:
compiledAdapter: listchecker
params:
# providerUrl: ordinarily black and white lists are maintained
# externally and fetched asynchronously using the providerUrl.
overrides: ["10.57.0.0/16"] # overrides provide a static list
blacklist: false
entryType: IP_ADDRESSES
---
apiVersion: config.istio.io/v1alpha2
kind: instance
metadata:
name: sourceip
spec:
compiledTemplate: listentry
params:
value: source.ip | ip("0.0.0.0")
---
apiVersion: config.istio.io/v1alpha2
kind: rule
metadata:
name: checkip
spec:
match: source.labels["istio"] == "ingressgateway"
actions:
- handler: whitelistip
instances: [ sourceip ]
---
您可以使用参数providerURL
来维护外部列表。
还要检查externalTrafficPolicy: Local
在 istio 的入口网关服务上使用。
根据评论,我最后的建议是使用不同的入口控制器来避免使用 kube-proxy,我的建议是使用 nginx-controller
https://github.com/kubernetes/ingress-nginx
您可以将此入口配置为充当代理的常规 nginx