OpenShift Security (12) - 用 RHACS 管理容器之间的网络访问策略(附视频)

89 篇文章 3 订阅
76 篇文章 6 订阅

OpenShift 4.x HOL教程汇总
本文在 OpenShift 4.11 + RHACS 3.71.0 环境中进行验证。

允许多个命名空间中的特定 Pod 相互访问

  1. 部署测试应用资源。
oc new-project project1
oc label namespace project1 name=project1
oc new-project project2
oc label namespace project2 name=project2
oc new-project project3
oc label namespace project3 name=project3
  
oc new-app -n project1 openshiftroadshow/parksmap --name=db
oc new-app -n project1 openshiftroadshow/parksmap --name=web
oc new-app -n project1 openshiftroadshow/parksmap --name=api
oc new-app -n project1 openshiftroadshow/parksmap --name=api-proxy
 
oc new-app -n project2 openshiftroadshow/parksmap --name=mail
oc new-app -n project2 openshiftroadshow/parksmap --name=db
oc new-app -n project2 openshiftroadshow/parksmap --name=monitoring
 
oc new-app -n project3 openshiftroadshow/parksmap --name=api
  1. 在 OpenShift 上运行以下 NetworkPolicy
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: protect-db
  namespace: project1
spec:
  ingress:
  - from:
    - podSelector:
        matchExpressions:
          - {key: deployment, operator: In, values: [api]}
    - namespaceSelector:
        matchLabels:
          name: project2
      podSelector:
        matchLabels:
          deployment: monitoring
  podSelector:
    matchLabels:
      deployment: db
  policyTypes:
  - Ingress
  - Egress
 
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: protect-api
  namespace: project1
spec:
  ingress:
  - from:
    - podSelector:
        matchExpressions:
          - {key: deployment, operator: In, values: [api-proxy,web]}
    - namespaceSelector:
        matchLabels:
          name: project2
      podSelector:
        matchLabels:
          deployment: monitoring
  egress:
  - to:
    - podSelector:
        matchExpressions:
          - {key: deployment, operator: In, values: [db]}
    - namespaceSelector:
        matchLabels:
          name: project3
      podSelector:
        matchLabels:
          deployment: api
  podSelector:
    matchLabels:
      deployment: api
  policyTypes:
  - Ingress
  - Egress
 
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: protect-db
  namespace: project2
spec:
  ingress:
  - from:
    - podSelector:
        matchLabels:
          deployment: monitoring
    - podSelector:
        matchLabels:
          deployment: mail
  podSelector:
    matchLabels:
      deployment: db
  policyTypes:
  - Ingress
  - Egress
 
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: protect-api
  namespace: project3
spec:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: project1
      podSelector:
        matchExpressions:
          - {key: deployment, operator: In, values: [api,web,api-proxy]}
    - namespaceSelector:
        matchLabels:
          name: project2
      podSelector:
        matchLabels:
          deployment: monitoring
  podSelector:
    matchLabels:
      deployment: api
  policyTypes:
  - Ingress
  1. 在 RHACS 控制台的 Network Graph 中选中 PROJECT1db,可以通过连线和箭头看出网络策略只允许从 PROJECT1apiPROJECT2monitoring 访问到PROJECT1db
    在这里插入图片描述
  2. 选中 PROJECT2api,可以看到与之相关的进出网络策略,从箭头防线可以看出网络访问策略包括 3 进 2 出。
    在这里插入图片描述
  3. 可以执行以下命令在一个 Pod 中访问目标 Pod ,通过联通结果确认和网络访问策略匹配。
oc project project1
oc exec $(oc get pod --no-headers -o name | grep api) -- curl -sI db.project1.svc.cluster.local:8080
oc exec $(oc get pod --no-headers -o name | grep api) -- curl -sI api.project3.svc.cluster.local:8080
oc exec $(oc get pod --no-headers -o name | grep web) -- curl -sI db.project1.svc.cluster.local:8080

oc project project2
oc exec $(oc get pod --no-headers -o name | grep monitoring) -- curl -sI api.project3.svc.cluster.local:8080
oc exec $(oc get pod --no-headers -o name | grep mail) -- curl -sI api.project3.svc.cluster.local:8080

oc project project3
oc exec $(oc get pod --no-headers -o name | grep api) -- curl -sI mail.project2.svc.cluster.local:8080
oc exec deploy/api -n project1 -- curl -sI db.project1.svc.cluster.local:8080
oc exec deploy/web -n project1 -- curl -sI db.project1.svc.cluster.local:8080
oc exec deploy/api -n project1 -- curl -sI api.project3.svc.cluster.local:8080

oc exec deploy/monitoring -n project2 -- curl -sI api.project3.svc.cluster.local:8080
oc exec deploy/mail -n project2 -- curl -sI api.project3.svc.cluster.local:8080

oc exec deploy/api -n project3 -- curl -sI mail.project2.svc.cluster.local:8080

在一个命名空间中,只允许具有相同标签的 Pod 之间访问

  1. 执行命令,创建测试应用
oc delete all --all
oc new-app --image=openshiftroadshow/parksmap --name=hello1 -l app.group=app-group-1
oc new-app --image=openshiftroadshow/parksmap --name=hello2 -l app.group=app-group-1
oc new-app --image=openshiftroadshow/parksmap --name=hello3 -l app.group=app-group-2
oc new-app --image=openshiftroadshow/parksmap --name=hello4 -l app.group=app-group-2
  1. 根据以下配置,分别针对 app-group-1 和 app-group-2 创建网络策略,只能让 app.group 标签相同的 Pod 之间相互访问。
    在这里插入图片描述
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: app-group-1-policy
  namespace: project1
spec:
  podSelector:
    matchLabels:
      app.group: app-group-1
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app.group: app-group-1
  policyTypes:
    - Ingress
---
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: app-group-2-policy
  namespace: project1
spec:
  podSelector:
    matchLabels:
      app.group: app-group-2
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app.group: app-group-2
  policyTypes:
    - Ingress
  1. 在 RHACS 的 Network Graph 中分别查看 hello1、hello2、hello3 和 hello4 能被哪些 Pod 访问。
    在这里插入图片描述
  2. 确认在 hello1 中只能访问 hello2
oc exec deploy/hello1 -n project1 -- curl -sI hello2:8080
oc exec deploy/hello1 -n project1 -- curl -sI hello3:8080
oc exec deploy/hello1 -n project1 -- curl -sI hello4:8080
  1. 确认在 hello3 中只能访问 hello4
oc exec deploy/hello3 -n project1 -- curl -sI hello1:8080
oc exec deploy/hello3 -n project1 -- curl -sI hello2:8080
oc exec deploy/hello3 -n project1 -- curl -sI hello4:8080

演示视频

视频

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值