《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的应用发布流程。
运行环境要求
OpenShift 集群,计算节点内存32G,配置有Storage。
配置 OpenShift 中的环境
注意:本节特殊说明外其他全部内容都是用OpenShift集群管理员进行操作。
安装DevSecOps Operator
- 用集群管理员创建一个新项目“devsecops”。
$ oc new-project devsecops
- 执行以下命令在本地的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
- 注册完,可在OpenShift控制台的OperatorHub中查找到“DevSecOps Operator”。
- 将“DevSecOps Operator”安装到“devsecops”项目中。
- 完成后可以在“安装的Operators”菜单中看到“DevSecOps Operator”。
创建访问“registry.redhat.io”的Secret对象(可选)
如果OpenShift中未配能访问的“registry.redhat.io”的pull-secret,这需要根据本节向OpenShift添加能访问“registry.redhat.io”的pull-secret。
- 登录“https://access.redhat.com/terms-based-registry/”,点击“New Service Account”按钮。
- 提供“Name”和“Description”信息,然后点击“CREATE”。
- 进入“OpenShift Secret”栏目,点击“Step 1 Download Secret”中的“view its contents”链接,然后复制“data”区域内容。
- 根据复制的“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 环境
- 进入“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
- 在“安装的 Operators”查看安装好的Operator,包括:codeready、gitea、sonar、quay、nexus。
- 实例创建完可以在“开发者”视图中的“拓扑”中看到以下部署好的资源,包括:codeready、gitea、sonar、quay、nexus、rocket-chart等环境。
- 在部署名为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环境
- 使用“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
- 打开名为“DevSecOpsWorkshop”的Route地址。用任意邮箱和“redhatgov”密码登录。
email:xiaoyliu@redhat.com
password:redhatgov - 打开上图的“Workshop Dashborad”链接,并根据上图提示用“use1/openshift”登录。
- 在“Authorize Access”页面中选择“Allow selected permissions”。
- 系统会为登录用户“user1”创建运行环境,并最终显示Workshop控制台。
这样DevSecOps Workshop的环境就安装好了,下面可以根据Workshop说明进行操作了。
另外,由于Workshop环境使用RedHat SSO和所有软件进行了单点登录集成,因此可用相同的用户登录OpenShift和所有其他软件。
通过名为“sonarqube”的路由访问SonarQube 控制台
通过名为“nexus”的路由访问Nexus控制台
通过名为“quayecosystem-quay”的路由访问Quay控制台
在安装完Quay后,也会在OpenShift控制台中增加了新的状态和菜单。
通过名为“codeready”的路由访问CodeReady Workspaces控制台
Workshop的RocketChat应用
配置客户端环境
安装Tekton客户端
在“安装的Operators”中进入“Red Hat OpenShift Pipelines”,在“详情”页面下方个根据下图提示下载“tkn”客户端。
或者执行以下命令下载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