【CKA 2024】CKA 考前自学 (三)

实战练习

设置配置环境:

[candidate@node-1] $ kubectl config use-context hk8s

Task

在现有的 namespace my-app 中创建一个名为 allow-port-from-namespace 的新 NetworkPolicy。

确保新的 NetworkPolicy 允许 namespace echo 中的 Pods 连接到 namespace my-app 中的 Pods 的 9000 端口。

进一步确保新的 NetworkPolicy:

不允许对没有在监听 端口 9000 的 Pods 的访问

不允许非来自 namespace echo 中的 Pods 的访问

理论学习

Kubernetes NetworkPolicy
Kubernetes NetworkPolicy 用于定义和管理网络访问策略,它提供了一种声明性的方式来控制 Pod 之间以及 Pod 与集群内外其他网络实体之间的通信。

通过使用 NetworkPolicy 可以定义规则以限制进出 Pod 的网络流量。 这些规则可以基于多个属性进行过滤,利用 Pod 的标签、命名空间、IP 地址和端口。可以定义允许或拒绝特定来源或目标的流量,并制定允许的协议和端口范围。

NetworkPolicy 可以帮助实施网络隔离、安全性、流量控制和应用程序微服务架构等策略。

  • 网络隔离 :通过定义 NetworkPolicy,您可以限制 Pod 与其他 Pod 或命名空间之间的通信,实现网络隔离和安全性。
  • 流量控制:NetworkPolicy 允许根据源 IP 、目标 IP 、协议和端口的等属性来控制进出 Pod 的流量,以确保只用经过授权的流量可以访问特定的 Pod。
  • 应用程序微服务: 可以定义应用程序的微服务之间的网络通信策略,从而实现应用程序的模块化和解耦。每个微服务可以根据需要定义自己的网络策略。
  • 安全策略:NetworkPolicy 可以仅允许来自特定 IP 范围的流量或仅允许使用特定的安全协议。

下面是一个 NetworkPolicy 的示例:

apiVersion: networking.k8s.io/v1	# 指定使用的 Kubernetes API 版本
kind: NetworkPolicy		# 声明配置为 NetworkPolicy 资源
metadata:		# 元数据  用于定义 NetworkPolicy 的名称和命名空间
  name: test-network-policy
  namespace: default
spec:		# 定义规则与策略
  podSelector:		# 选择应用 NetworkPolicy 的目标 Pod
    matchLabels:		# 匹配标签
      role: db
  policyTypes:		# 策略类型
  - Ingress		# 允许入站流量
  - Egress		# 允许出站流量
  ingress:		# 入站规则
  - from:		# 允许流量来源
    - ipBlock:		# 允许来自 IP 段的流量
        cidr: 172.17.0.0/16
        except:		# 排除不允许的 IP 段
        - 172.17.1.0/24
    - namespaceSelector:		# 允许来自特定命名空间的流量
        matchLabels:
          project: myproject
    - podSelector:		# 允许来自特定标签的 Pod
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:		# 出站规则,允许从 Pod 发出的流量
  - to:		# 指定允许流量去往的目标
    - ipBlock:		# 指定允许去往的 IP 段
        cidr: 10.0.0.0/24
    ports:		# 指定允许的端口和协议
    - protocol: TCP
      port: 5978

操作步骤

  1. 进入题目指定集群
$ kubectl config use-context k8s
  1. 查看 Namespace 标签
# 获取 Namespace echo 的标签
$ kubectl get ns echo --show-labels
# 为 Namespace echo 添加标签
$ kubectl label ns echo project=echo
  1. 上官网复制项目 yaml 文件,并根据题目要求修改 yaml 文件内容
# 以下内容以在满足题目要求的情况下最小化 NetworkPolicy 策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: diy-namespace
  namespace: my-app
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: echo
    ports:
    - protocol: TCP
      port: 9000
  1. 在服务器上创建 NetworkPolicy.yaml 将上面 yaml 内容写入其中
# 编辑 yaml 文件
$ vim NetworkPolicy.yaml
# 执行 NetworkPolicy 策略
$ kubectl apply -f NetworkPolicy.yaml

在这里插入图片描述

检查命令

# 查看 Namespace  echo NetworkPolicy 策略
$ kubectl describe networkpolicy -n my-app

在这里插入图片描述

参考链接:https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/

请添加图片描述

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

也言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值