kubernetes CKS 1.8 网络访问控制

本文详细介绍了Kubernetes网络策略的使用,包括应用场景、基本配置和工作流程。网络策略用于限制Pod的出入站流量,实现网络访问控制。通过实例展示了如何拒绝命名空间内的所有流量、限制特定命名空间访问、允许跨命名空间访问以及在同一命名空间内实施应用间访问控制。同时,提供了CKS考试相关的考题分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

• 网络策略应用场景
• 网络策略概述
• 网络访问控制5个案例

1.8.1 应用场景

默认情况下,Kubernetes 集群网络没任何网络限制,Pod 可以与任何其他 Pod 通信,在某些场景下就需要进行网络控制, 减少网络攻击面,提高安全性,这就会用到网络策略。 网络策略(Network Policy):是一个K8s资源,用于限制Pod出入流量,提供Pod级别和Namespace级别网络访问控制。 网络策略的应用场景:
• 应用程序间的访问控制,例如项目A不能访问项目B的Pod
• 开发环境命名空间不能访问测试环境命名空间Pod
• 当Pod暴露到外部时,需要做Pod白名单
• 多租户网络环境隔离

1.8.2 网络策略概述

1.8.2.1 基本配置

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

podSelector:目标Pod,根据标签选择。
policyTypes:策略类型,指定策略用于入站、出站流量。
Ingress:from是可以访问的白名单,可以来自于IP段、命名空间、 Pod标签等,ports是可以访问的端口。 Egress:这个Pod组可以访问外部的IP段和端口。

1.8.2.2 网络策略工作流程

网络策略工作流程:
1、创建Network Policy资源
2、Policy Controller监控网络策略,同步并通知节点上程序
3、节点上DaemonSet运行的程序从etcd中获取Policy,调用本 地Iptables创建防火墙规则

在这里插入图片描述

1.8.3 网络访问控制案例

1.8.3.1 案例1:拒绝命名空间下所有Pod出入站流量

需求:拒绝test命名空间下所有Pod入、出站流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
  namespace: test
spec:
  podSelector: {} # 匹配本命名空间所有pod
  policyTypes: 
  - Ingress
  - Egress
# ingress和egress没有指定规则,则不允许任何流量进出pod

1.8.3.2 案例2:拒绝其他命名空间Pod访问

需求:test命名空间下所有pod可以互相访问,也可以访问其他
命名空间Pod,但其他命名空间不能访问test命名空间Pod。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-namespaces 
  namespace: test
spec:
  podSelector: {} 
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector: {} # 匹配本命名空间所有pod

1.8.3.3 案例3:允许其他命名空间Pod访问指定应用

需求:允许其他命名空间访问test命名空间指定Pod

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-namespaces 
  namespace: test
spec:
  podSelector: 
    matchLabels:
      app: web
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector: {} # 匹配所有命名空间的pod

1.8.3.4 案例4:同一个命名空间下应用之间限制访问

需求:将test命名空间中标签为run=web的pod隔离, 只允许标签为run=client1的pod访问80端口

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: app-to-app
  namespace: test
spec:
  podSelector:
    matchLabels:
      run: web
  policyTypes:
  - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          run: client1
    ports:
    - protocol: TCP
      port: 80

以上是允许在test这个命名空间,假如不限制命名空间,如下:

]# cat test0719.yaml                                  
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: app-to-app
  namespace: test
spec:
  podSelector:
    matchLabels:
      run: web
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector: {}
      podSelector:
        matchLabels:
          run: client1
    ports:
    - protocol: TCP
      port: 80

1.8.4 CKS考题分析

1.8.4.1 考题一

解读:在 testing 命名空间创建一个名为 denypolicy 的网络策略。拒绝所有 Ingress 和
Egress 流量。将网络策略应用到 testing 命名空间中的所有 pod。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: denypolicy
  namespace: testing
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

1.8.4.2 考题二

解读:创建一个名为 pod-restriction 的网络策略,以限制命名空间 dev-team 中 products
service Pod。
只允许以下 Pod 连接 products-service Pod:

  • qa 命名空间中的 Pod
  • Pod 标签为 environment:testing,在所有命名空间
kubectl get pod -n dev-team --show-labels # 查看 pod 标签(environment: staging)
kubectl get ns --show-labels # 查看 qa 命名空间标签(name: qa)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: pod-restriction
  namespace: dev-team
spec:
  podSelector:
  matchLabels:
    environment: staging
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: qa
  - from:
    - namespaceSelector: {}
      podSelector:
        matchLabels:
          environment: testing
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值