IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> OpenShift 4 - 个性化 Project 对象,提升 Namespace 使用安全 -> 正文阅读

[系统运维]OpenShift 4 - 个性化 Project 对象,提升 Namespace 使用安全

OpenShift / RHEL / DevSecOps 汇总目录
说明:本文已经在OpenShift 4.8环境中验证

Kubernetes 的 Namespace 与 OpenShift 的 Project 区别

在功能上 OpenShift 和 Kubernetes 完全兼容,但在很多地方 OpenShift 都进行了功能增强,以实现更多的功能或更便捷的操作。这其中之一就是OpenShift 的 Project 对 Kubernetes 的 Namespace 功能增强。

  1. 执行命令,分别创建一个 Project 和 Namespace。
$ oc new-project my-project
$ kubectl create namespace my-namespace
  1. 在 OpenShift 控制台的项目中可以看到两者显示稍有不同,这是因为在创建 Project 的时候会自动为其添加说明 “请求者” 的 Annotation,而在创建 Namespace 的时候就不会自动添加 Annotation。
    在这里插入图片描述
  2. 分别执行以下命令,还可以看出在 my-project 中除了三个默认的 “system:xxxxx” Role 外有一个名为 “admin” 的 Role,而在 my-namespace 中只有默认的 Role。
$ oc get rolebinding -n my-project
NAME                    ROLE                               AGE
admin                   ClusterRole/admin                  16m
system:deployers        ClusterRole/system:deployer        15m
system:image-builders   ClusterRole/system:image-builder   15m
system:image-pullers    ClusterRole/system:image-puller    15m
 
$ oc get rolebinding -n my-namespace
NAME                    ROLE                               AGE
system:deployers        ClusterRole/system:deployer        15m
system:image-builders   ClusterRole/system:image-builder   15m
system:image-pullers    ClusterRole/system:image-puller    15m

在 OpenShift 中创建 Project 是通过 Template 实现的。执行 Template 的过程不但会创建 Namespace,还能创建其对应的 RoleBinding 对象。用户在执行 “oc new-project <PROJECT_NAME>” 命令的时候,在 OpenShift 收到的是创建 ProjectRequest 的 API 请求,然后 OpenShift 再使用 Temple 创建对应的资源。

在 OpenShift 控制台的 API Explore中可以找到 “Project” 和 “ProjectRequest ” 这两个不同的对象。
在这里插入图片描述
而在 OpenShift 中创建 Project 所使用的 Template 是在 “集群设置” 中指定的。因此可以通过修改 Project 使用 Template 来改变创建 Project 的缺省操作,比如更加严格的网络隔离策略、Namespace 级的资源限制等。
在这里插入图片描述

个性化 Project 对象,提升 Namespace 使用安全

  1. 执行以下命令可以获得负责创建 Project 对应的 Template 内容。
$ oc adm create-bootstrap-project-template -o yaml > template_project-request-extended.yaml
  1. 查看 template_project-request-extended.yaml 的内容。
apiVersion: template.openshift.io/v1
kind: Template
metadata:
  creationTimestamp: null
  name: project-request
objects:
- apiVersion: project.openshift.io/v1
  kind: Project
  metadata:
    annotations:
      openshift.io/description: ${PROJECT_DESCRIPTION}
      openshift.io/display-name: ${PROJECT_DISPLAYNAME}
      openshift.io/requester: ${PROJECT_REQUESTING_USER}
    creationTimestamp: null
    name: ${PROJECT_NAME}
  spec: {}
  status: {}
- apiVersion: rbac.authorization.k8s.io/v1
  kind: RoleBinding
  metadata:
    creationTimestamp: null
    name: admin
    namespace: ${PROJECT_NAME}
  roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: admin
  subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: ${PROJECT_ADMIN_USER}
parameters:
- name: PROJECT_NAME
- name: PROJECT_DISPLAYNAME
- name: PROJECT_DESCRIPTION
- name: PROJECT_ADMIN_USER
- name: PROJECT_REQUESTING_USER
  1. 修改 template_project-request-extended.yaml 文件,为 Template 增加 allow-from-openshift-ingress、allow-from-openshift-monitoring、allow-same-namespace 三个 NetworkPolicy,它们关闭在项目之间彼此访问的能力,只允许项目内部的 Pod 之间项目访问、以及来自项目外部 OpenShift Ingress 和 OpenShift Monitoring 的访问。另外还为项目增加了Namespace 级的缺省 LimitRange。
$ cat << EOF > template_project-request-extended.yaml
apiVersion: template.openshift.io/v1
kind: Template
metadata:
  creationTimestamp: null
  name: project-request-extended
  namespace: openshift-config
objects:
- apiVersion: project.openshift.io/v1
  kind: Project
  metadata:
    annotations:
      openshift.io/description: ${PROJECT_DESCRIPTION}
      openshift.io/display-name: ${PROJECT_DISPLAYNAME}
      openshift.io/requester: ${PROJECT_REQUESTING_USER}
    creationTimestamp: null
    name: ${PROJECT_NAME}
  spec: {}
  status: {}
- apiVersion: rbac.authorization.k8s.io/v1
  kind: RoleBinding
  metadata:
    creationTimestamp: null
    name: admin
    namespace: ${PROJECT_NAME}
  roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: ClusterRole
    name: admin
  subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: ${PROJECT_ADMIN_USER}
- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    name: allow-from-openshift-ingress
    namespace: ${PROJECT_NAME}
  spec:
    ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            network.openshift.io/policy-group: ingress
    podSelector: {}
    policyTypes:
    - Ingress
- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    name: allow-from-openshift-monitoring
    namespace: ${PROJECT_NAME}
  spec:
    ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            network.openshift.io/policy-group: monitoring
    podSelector: {}
    policyTypes:
    - Ingress
- apiVersion: networking.k8s.io/v1
  kind: NetworkPolicy
  metadata:
    name: allow-same-namespace
    namespace: ${PROJECT_NAME}
  spec:
    podSelector:
    ingress:
    - from:
      - podSelector: {}
- apiVersion: v1
  kind: LimitRange
  metadata:
    name: limitrange
    namespace: ${PROJECT_NAME}
  spec:
    limits:
    - default:
        cpu: 500m
        memory: 512Mi
      defaultRequest:
        cpu: 10m
        memory: 32Mi
      type: Container
parameters:
- name: PROJECT_NAME
- name: PROJECT_DISPLAYNAME
- name: PROJECT_DESCRIPTION
- name: PROJECT_ADMIN_USER
- name: PROJECT_REQUESTING_USER
EOF
  1. 执行命令,在 openshift-config 中创建新 Template。
$ oc apply -f template_project-request-extended.yaml
  1. 执行命令,更新 Project 使用的 Template。
$ oc patch project.config.openshift.io cluster --type=merge --patch '{"spec": {"projectRequestTemplate": {"name": "project-request-extended"}}}'
  1. 为了允许 Ingress 对项目的访问,为 “default” 的命名空间打标签。
$ oc label namespace default 'network.openshift.io/policy-group=ingress'
  1. 创建一个新项目,然后验证 OpenShift 会自动该项目创建 LimitRange 和 NetworkPolicy。
$ new-project my-project1

$ get limitrange -n my-project1
NAME         CREATED AT
limitrange   2022-03-07T01:54:38Z

$ get networkpolicy -n my-project1
NAME                              POD-SELECTOR   AGE
allow-from-openshift-ingress      <none>         2m18s
allow-from-openshift-monitoring   <none>         2m18s
allow-same-namespace              <none>         2m18s

参考

https://github.com/acend/openshift-4-ops-training/blob/main/content/en/docs/01/02_configuration.md

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:59:52  更:2022-03-08 23:03:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:49:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码