1

我正在我的 kubernetes 集群中设置我的默认命名空间,以允许来自外部节点/主机的传入流量,但拒绝任何可能的 pod 间通信。我有 2 个 nginx pod,我想在集群中完全隔离它们。两个 pod 都使用 nodePort 类型的服务公开,并且可以从外部访问它们。

我首先应用以下默认拒绝网络策略:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
spec:
  podSelector: {}
  policyTypes:
  - Ingress

然后,我尝试使用以下网络策略允许外部流量:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-external
spec:
  podSelector: {}
  ingress:
    - from:
        - ipBlock:
            cidr: 192.168.0.0/16

但不幸的是,我无法从集群外部和内部访问该服务。

运行示例: - macOS High Sierra v10.13.6 - minikube v1.5.2 --> 使用网络插件 = cilium - kubectl v1.16.2

我怎么能面对这个问题?

4

1 回答 1

2

如果您想允许任何传入流量到任何 pod,但源自集群的流量除外,您可以在允许来自所有 IP 的流量的规则中使用“except”表示法。在下面替换172.17.1.0/24为包含您的 pod 的 cidr:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-internal
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 172.17.1.0/24
于 2019-11-05T20:40:07.630 回答