《OpenShift 4.x HOL教程汇总》 说明:本文已经在OpenShift 4.8环境中验证

《OpenShift 4 - DevSecOps Workshop 系列视频 》

注意:本 Workshop 依赖的 Quay Operator 已经不再支持 Quay 3.3,因此将无法完成 Workshop 的安装过程。可以先以以上视频了解 Workshop 相关场景。


文章目录

  • DevSecOps Workshop 说明
  • 运行环境要求
  • 配置 OpenShift 中的环境
  • 安装DevSecOps Operator
  • 创建访问“registry.redhat.io”的Secret对象(可选)
  • 根据 DevSecOps Operator 创建 DevSecOps Workshop 环境
  • 访问Workshop环境
  • 配置客户端环境
  • 安装Tekton客户端
  • 安装其他工具
  • 设置环境变量
  • 参考


DevSecOps Workshop 说明

本Workshop使用Tekton作为CI/CD的引擎实现如下DevSecOps的应用发布流程。

pve宿主机地址增加vlan标签_json

运行环境要求

OpenShift 集群,计算节点内存32G,配置有Storage。

配置 OpenShift 中的环境

注意:本节特殊说明外其他全部内容都是用OpenShift集群管理员进行操作。

安装DevSecOps Operator

  1. 用集群管理员创建一个新项目“devsecops”。
$ oc new-project devsecops
  1. 执行以下命令在本地的marketplace注册DevSecOps Operator。
$ oc apply -f - << EOF
apiVersion: operators.coreos.com/v1alpha1
kind: CatalogSource
metadata:
  name: redhatgov-operators
  namespace: openshift-marketplace
spec:
  sourceType: grpc
  image: quay.io/redhatgov/operator-catalog:latest
  displayName: Red Hat NAPS Community Operators
  publisher: RedHatGov
EOF
  1. 注册完,可在OpenShift控制台的OperatorHub中查找到“DevSecOps Operator”。
  2. 将“DevSecOps Operator”安装到“devsecops”项目中。
  3. 完成后可以在“安装的Operators”菜单中看到“DevSecOps Operator”。

创建访问“registry.redhat.io”的Secret对象(可选)

如果OpenShift中未配能访问的“registry.redhat.io”的pull-secret,这需要根据本节向OpenShift添加能访问“registry.redhat.io”的pull-secret。

  1. 登录“https://access.redhat.com/terms-based-registry/”,点击“New Service Account”按钮。
  2. 提供“Name”和“Description”信息,然后点击“CREATE”。
  3. 进入“OpenShift Secret”栏目,点击“Step 1 Download Secret”中的“view its contents”链接,然后复制“data”区域内容。
  4. 根据复制的“data”内容执行以下命令,在“devsecops”项目中创建secret对象。
$ oc apply -f - << EOF
apiVersion: v1
kind: Secret
metadata:
  name: devsecops-workshop-pull-secret
  namespace: devsecops
data:
  .dockerconfigjson: eyJhdXRocyI6eyJyZWdpc3RyeS5yZWRoYXQuaW8iOnsiYXV0aCI6Ik1URXdNRGt4TUROOFpHVjJjMlZqYjNCekxYZHZjbXR6YUc5d09tVjVTbWhpUjJOcFQybEtVMVY2VlhoTmFVbzVMbVY1U25wa1YwbHBUMmxKTTA0eVNYaFpiVVY2VGxSUk5FOUVVVEJOZWtVeFQxUlplazFxYkcxWlYxSnBXVzFGTkU5VVpHdFBRMG81TG5OTWVVODRRa1UyZVVKeGFsVjBjMGhYVVZRd1pEQTFjWHBQUnpkWGIyRktTVU10TW1wbGFrUTVZaTE0Tm5wNlJsZGlNMFJzUWxGV1UzSktZbUo1VURoUFJHNVFWRVI1VlRGV2VEZG5Ta1JRUWw5dWNWRkxRMU0yZVV0bkxXRklPSHA1V1RCRFkxQkJORWw2TlhOQlkyb3hWV2w1ZUZKWVEyUjVWWEJJUW1sZlFUbFhkMUJUZWxodGVrWldNa0ZUTFhsZlREZFdWbWs0UlZwME5sSk1aWFJZZVdack1YSkNaWGw1U0ZCVVJIbGlhM3BNYkhCME16TlBUa3QyWW1KWE9WOVZhRWs0Vm5GT1FVOVVVazFuWkZSYU5FUklTRTVrYmt0QldGSjVha0UwU1dKR2EySlNiMWxrYmxaWFNUTjRMVkZxTVUxSGJtSnNSV1JqUTB0VlVEWnVXV2hWZFVaNlFYY3RaMk5zVDE4MWFFcEJjMEpZWlVSdGRYbFBTMDV6TjJrNVNFMW1RbDltV1ZRM1MzTjJObTFIVVVsQk1tMXhlRVJTT0ROc2VVMTBXVlYxYTBacE0zcG1TaloyTFVNMGFFMVJUa05mUVVSUlNqSXpkR051YzI1UExXcGlRbFZPZUdKaE1EZEtha0pNU1VkNVdHbExhMTl2YVZkbVRUTkRhRzlOTlY5dFRucHBUazlqYVhWR2FYRm5WblZPVFU0MkxXRldSVk5PVEU0eFYyYzRRMEpTUjNsNVZWOWZiRWh4ZVVOSlNEbFlkbWRxYnpoVmJsWnhWVUpRU0RKUE9XTXpPVWd6WkVndE0wOHhhVlZJVDNkTVVGTldNMjF1YTNreWMzUjVVRVJLWDIxVmJXaDJlRGRPWjBOR2NVVlZiVVpDZFdWTmEyVmFiV1p2WWxoTFNsSmpXa3hsY1RSNWRGOWpjVTB0VjJKWGQzbDRaMXA0Y0c0MWQxaDVNVEl0UjJOek5qSnBNekY2VUVJMGRFSnhSR05hVVhrelRtTkpZMFoxVDJVNFdWUldMVUk0YjA1RVNrTXpOVXRaVjNadldGTTBVRWx3TUU5b01qbEZTSEJIZDFkTWVXbEhibXBRUm5FM1NpMXlNMUZLVW1aRE9XSjFRMGxSV2tGVFpuSnlNalZRTWtwSlFrNDNRUzFrVFRrd1RERnRZbGd3VWtSNExXSkVPWHA0TTFCb1ptSjRTVTFqIn19fQ==
type: kubernetes.io/dockerconfigjson
EOF

根据 DevSecOps Operator 创建 DevSecOps Workshop 环境

  1. 进入“DevSecOps Operator”,根据以下 2 个 YAML 之一创建一个“DevSecOpsWorkshop”实例。这里我们可以指定自动创建 3 个用户可以使用 workshop,用户名将分别为“user1”、“user2”、“user3”,默认密码都将是“openshift”。
apiVersion: redhatgov.io/v1alpha1
kind: DevSecOpsWorkshop
metadata:
  namespace: devsecops
  name: devsecopsworkshop
spec:
  devsecopsworkshop:
    workshopUsers:
      numberOfUsers: 3

或者

apiVersion: redhatgov.io/v1alpha1
kind: DevSecOpsWorkshop
metadata:
  namespace: devsecops
  name: devsecopsworkshop
spec:
  devsecopsworkshop:
    pullSecret:
      name: devsecops-workshop-pull-secret
      namespace: devsecops
    workshopUsers:
      numberOfUsers: 3
  1. 在“安装的 Operators”查看安装好的Operator,包括:codeready、gitea、sonar、quay、nexus。
  2. 实例创建完可以在“开发者”视图中的“拓扑”中看到以下部署好的资源,包括:codeready、gitea、sonar、quay、nexus、rocket-chart等环境。
  3. 在部署名为quayecosystem-quay的Pod时候,缺省可能会报以下错误(在Pod的日志中):
...
connect() to unix:/tmp/gunicorn_web.sock failed (2: No such file or directory) while connecting to upstream...
...

这是由于Quay使用LimitRange有可能和OpenShift环境有抵触,可以执行以下命令删除以下名为devsecops-core-resource-limits的LimitRange。

$ oc delete limitrange devsecops-core-resource-limits -n devsecops

访问Workshop环境

  1. 使用“user1、user2…”用户登录OpenShift(这些用户的密码全是“openshift”),然后查看“devsecops”项目中生成的Route资源。
$ oc get route -n devsecops
NAME                                   HOST/PORT                                                                           PATH         SERVICES                               PORT       TERMINATION            WILDCARD
codeready                              codeready-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                   /            che-host                               8080       edge/Redirect          None
codeready-dashboard                    codeready-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                   /dashboard   codeready-dashboard                    8080       edge/Redirect          None
devfile-registry                       devfile-registry-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                         devfile-registry                       8080       edge/Redirect          None
devsecops-workshop-dashboard-spawner   dashboard.apps.cluster-39c8.39c8.sandbox139.opentlc.com                                          devsecops-workshop-dashboard-spawner   8080-tcp   edge/Redirect          None
gitea-server                           gitea-server-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                             gitea-server                           <all>      edge/Redirect          None
keycloak                               keycloak-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                                 keycloak                               8080       edge/Redirect          None
nexus                                  nexus-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                                    nexus                                  8081       edge/Redirect          None
nexus-docker                           nexus-docker-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                             nexus                                  8082       edge/None              None
plugin-registry                        plugin-registry-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                          plugin-registry                        8080       edge/Redirect          None
quayecosystem-quay                     quay.apps.cluster-39c8.39c8.sandbox139.opentlc.com                                               quayecosystem-quay                     8080       edge/Redirect          None
quayecosystem-quay-config              quayecosystem-quay-config-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                quayecosystem-quay-config              8443       passthrough/Redirect   None
rocketchat                             rocketchat-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                               rocketchat                             3000-tcp   edge/Redirect          None
sonarqube                              sonarqube-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                                sonarqube                              <all>      edge/Redirect          None
username-distribution                  username-distribution-devsecops.apps.cluster-39c8.39c8.sandbox139.opentlc.com                    username-distribution                  8080-tcp   edge/Redirect          None
  1. 打开名为“DevSecOpsWorkshop”的Route地址。用任意邮箱和“redhatgov”密码登录。
    email:xiaoyliu@redhat.com
    password:redhatgov
  2. 打开上图的“Workshop Dashborad”链接,并根据上图提示用“use1/openshift”登录。
  3. 在“Authorize Access”页面中选择“Allow selected permissions”。
  4. 系统会为登录用户“user1”创建运行环境,并最终显示Workshop控制台。

    这样DevSecOps Workshop的环境就安装好了,下面可以根据Workshop说明进行操作了。
    另外,由于Workshop环境使用RedHat SSO和所有软件进行了单点登录集成,因此可用相同的用户登录OpenShift和所有其他软件。

通过名为“sonarqube”的路由访问SonarQube 控制台

pve宿主机地址增加vlan标签_pve宿主机地址增加vlan标签_02


通过名为“nexus”的路由访问Nexus控制台

pve宿主机地址增加vlan标签_git_03


通过名为“quayecosystem-quay”的路由访问Quay控制台

pve宿主机地址增加vlan标签_devops_04


在安装完Quay后,也会在OpenShift控制台中增加了新的状态和菜单。

pve宿主机地址增加vlan标签_devops_05


pve宿主机地址增加vlan标签_客户端_06


通过名为“codeready”的路由访问CodeReady Workspaces控制台

pve宿主机地址增加vlan标签_pve宿主机地址增加vlan标签_07


Workshop的RocketChat应用

pve宿主机地址增加vlan标签_git_08

配置客户端环境

安装Tekton客户端

在“安装的Operators”中进入“Red Hat OpenShift Pipelines”,在“详情”页面下方个根据下图提示下载“tkn”客户端。

pve宿主机地址增加vlan标签_json_09


或者执行以下命令下载Tekton客户端。

$ curl -L https://github.com/tektoncd/cli/releases/download/v0.20.0/tkn_0.20.0_Linux_x86_64.tar.gz | tar -xzf -
$ sudo mv tkn /usr/bin/

安装其他工具

安装3.x版的yq工具。

$ wget https://github.com/mikefarah/yq/releases/download/3.4.1/yq_linux_386
$ sudo mv yq_linux_386 /usr/bin/yq
$ sudo chmod +x /usr/bin/yq

设置环境变量

设置环境变量。说明:本文中统一使用“user1”用户进行操作。如使用其他用户,请自行修改后文中的相关命令。

$ USER=$(oc whoami)
$ DEV=${USER}-dev
$ CICD=${USER}-cicd
$ STAGE=${USER}-stage
$ GIT_URL=$(oc get route gitea-server -ojsonpath="{.spec.host}" -n devsecops)
$ GIT_REPO=https://${GIT_URL}/${USER}/openshift-tasks.git
$ NEXUS_URL=$(oc get route nexus -ojsonpath={.spec.host} -n devsecops)

参考

https://github.com/liuxiaoyu-git/devsecops-workshop-dashboard/tree/develop/tekton/workshop/content