我的设置:使用 Calico 和 Istio 1.5 运行 EKS 1.14。
试图让示例 bookinfo 使用特定的 NetworkPolicies 运行。
我应用了拒绝所有流量的 GlobalNetworkPolicy:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: default-deny
spec:
selector: all()
types:
- Ingress
- Egress
我还为 Istio 添加了一个 GlobalNetworkPolicy 到命名空间和命名空间内的流量:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: allow-istio-system-to-ns
spec:
selector: all()
namespaceSelector: istio-injection == 'enabled'
types:
- Ingress
- Egress
ingress:
- action: Allow
source:
selector: all()
namespaceSelector: projectcalico.org/namespace == 'istio-system'
- action: Allow
source:
selector: all()
namespaceSelector: istio-injection == 'enabled'
egress:
- action: Allow
和一个允许 istio 系统上的所有入口和出口的 NetworkPolicy
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-istio-system-all
namespace: istio-system
spec:
selector: all()
types:
- Ingress
- Egress
ingress:
- action: Allow
egress:
- action: Allow
还有一个 NetworkPolicy 允许流量到端口 80 和 443 上的入口网关。我知道这个是多余的,但我希望将前一个减少到只有必要的入口。
apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
name: allow-istio-ingress-on-80-443
namespace: istio-system
spec:
selector: app == 'istio-ingressgateway'
ingress:
- action: Allow
protocol: TCP
destination:
ports:
- 80
- 443
还有一些其他不相关的 NetworkPolicies(访问 kube-dns、metrics-server)。部署bookinfo可以使用和不使用策略,并且与部署网关相同。
组件之间的连接有效(我可以执行到一个 pod 并连接到其他 pod)。但是,当我尝试使用策略通过网关访问产品页面时,我什么也得不到,而不是没有策略的情况下我得到的 HTML。
我是否错过了一些应该允许的流量?我应该为主节点或其他地方的负载均衡器制定策略吗?
编辑:如果我允许所有进入 istio-system 和命名空间,它就可以工作。所以我想我只是错过了命名空间中的其他一些入口,有没有办法将它限制为负载均衡器?