网络策略需要依赖cni 网络插件,calico 通过自定义k8s 资源支持网络策略
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: namespace: labels: annotations: spec:
下面详细描述NetworkPolicy.spec
podSelector 指定了该网络策略作用的Pod范围
NetworkPolicy.metadata.namespace
名称空间的所有podspec: podSelector: {}
spec: podSelector: matchLabels: app: db
spec: podSelector: matchExpressions: - key: app operator: In values: - db
policyTypes 指定流入流出的网络策略
spec: policyTypes: []
spec.egress
spec: policyTypes: - Egress
spec.ingress
spec: policyTypes: - Ingress
spec: policyTypes: - Egress egress: {}
spec: policyTypes: - Ingress ingress: {}
ingress 控制流入
的具体策略
spec: ingress: - from: - ipBlock: cidr: "10.4.7.1/24" expect: - "10.4.7.50/32" - "192.168.123.1/24" - namespaceSelector: matchLabels: {} matchExpressions: {} - podSelector: matchLabels: {} matchExpressions: {} - ports: - protocol: TCP port: 8000
egress 控制流出
的具体策略
spec: ingress: - to: - ipBlock: cidr: "10.4.7.1/24" expect: - "10.4.7.50/32" - "192.168.123.1/24" - namespaceSelector: matchLabels: {} matchExpressions: {} - podSelector: matchLabels: {} matchExpressions: {} - ports: - protocol: TCP port: 8000
测试文件
--- apiVersion: apps/v1 kind: Deployment metadata: name: test spec: selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: python command: ["python","-m","http.server"] --- apiVersion: v1 metadata: v1 kind: Service metadata: name: myapp spec: selector: app: web ports: - port: 8000 targetPort: 8000