前言
ForgeRock官方提供了一个DevOps方案(ForgeOps
)用于展示如何部署ForgeRock Identity Platform在Kubernetes里。
很遗憾的在官方CDK文档并没有教在Windows里的Docker Desktop Kubernetes
或minikube
部署ForgeOps。官方给的方案是运行一个Linux虚拟机,比如使用Hyper-V, VMWare Player 或 VMWare Workstation运行Ubuntu,然后在Linux虚拟机里使用minikube
来部署ForgeOps。
我个人认为为了实现本地开发而运行一个虚拟机实在是费资源。既然ForgeOps是展示在Kurbenetes上运行的,原理上无论在什么操作系统,只要我能部署一个Kubernetes cluster,我就应该能部署ForgeOps给的配置。
这里我们就尝试在Windows下的Docker Desktop Kubernetes部署ForgeOps。
安装需要的软件
如果你比较熟悉Kubernetes,其他一些小工具比如kubectx
和kubens
可以选择性安装。这些小工具可以提高工作效率,在这个部署中不是必要工具。
安装Docker Desktop并开启Kubernetes功能
安装我想应该非常简单,就不必我一步步指吧。在安装过程中会有一个选项询问是否要开启Kubernetes功能,只需打勾就好了。
如何你在安装中错过了,或早已安装了Docker Desktop的,就去设置目录开启Kubernetes功能就好了。
下载ForgeOps 7.2 Github源码
这里要注意每个版本的部署方式都有些许不同,这里我使用的是release/7.2.0
版本。但部署原理都是一样的,只要你掌握的原理,你就可以跟着不同版本的需要做些改动来完成部署。
如果你有用Github Desktop,只需在UI上点几个button就可以下载了。
这里我用git来下载源码:
git clone https://github.com/ForgeRock/forgeops.git
cd forgeops
处理sh文件EOL问题
我在创建docker image后发现所有的docker image都运行不了,原因是forgerock的base image是使用Linux核的,而forgeops
的.sh
源文件是使用CRLF
的,我有点搞不明白为什么。
所以我们必须先吧所有的.sh
源文件从CRLF
转去Linux能解读的LF
。当然一个一个文件去修改实在太耗时了,这里我们就需要用到dos2unix
这个小工具来帮我们批量处理了。
我个人对bash
比较熟悉,就使用git-bash
来完成,如果你比较熟悉PowerShell
,也可以用PowerShell
来完成:
find . -name "*.sh" -type f -exec dos2unix {} \;
更改imagePullPolicy
我们将使用forgeops
提供的skaffold yaml来进行部署,这个skaffold包括了创建custom docker image,并用custom docker image进行部署。
然而,forgeops
提供的kubernetes部署yaml都是用imagePullPolicy: Always
,如果你部署在本地的Kubernetes,它会一直尝试从互联网下载image,而导致ErrImgPull
image不能被下载。
这里我们就需要把所有的imagePullPolicy
从Always
改去IfNotPresent
或Never
,这样本地Kubernetes就会优先从本地查找image。
批量更改的方法很多,你就用你最适应的方法去改吧。我的方法是使用VS Code
打开forgeops
文件夹,然后使用Search & Replace功能,把imagePullPolicy: Always
批量replace成imagePullPolicy: IfNotPresent
。
检查Kubernetes
源文件的准备工作到这里就好了,现在要检查你的Kubernetes和安装的CLI能否运行。
kubectl get nodes
运行以上这个command你应该会得到docker-desktop
,然后status应该要是Ready
现在就可以创建新的namespace了,这个namespace主要是用来分开ForgeRock的应用以方便我们查看。
kubectl create ns forgerock
如果你有用kubens
,也可以把forgerock
设置成默认namespace:
kubens forgerock
然后检查所有所需的工具能正常运行
helm
skaffold
部署secret agent和cert manager
根据官方CDK Architecture文档,ForgeRock Identity Platform还需要secret agent
,cert manager
和 DS operator
。
DS Operator
我就不部署了,应该这个主要是用于backup和restore DS的资料,本地开发应该没用。如果你有需要也可以跟着secret agent
或cert manager
的部署方法。
部署secret agent
ForgeRock官方提供了secret agent的Kubernetes yaml部署文件,所以这一步非常简单。只需运行以下command就可以了:
kubectl apply -f https://github.com/ForgeRock/secret-agent/releases/download/v1.1.8/secret-agent.yaml
运行后就可以检查用kubectl get ns
command检查secret-agent-system
namespace是否已经创建。并检查secret-agent-controller-manager
是 READY 1/1
的状体:
kubectl get deployment -n secret-agent-system
部署cert manager
ForgeOps是用开源的cert-manager.io
来管理证书。forgeops
也提供一个bash script方便使用helm来部署cert-manager
。
这里我们可以利用git-bash
来运行这个bash script:
./bin/certmanager-deploy.sh
运行完成后也是检查下cert-manager
的status:
kubectl get deployment -n cert-manager
创建secrets
ForgeRock Identity Platform里用到大量的secrets,如果要一个一个创建不但麻烦费时也很复杂。这里forgeops
以提供的Kustomize部署文件利用secret agent来创建需要的secrets:
kubectl apply -k .\kustomize\base\secrets -n forgerock
部署完成后,用以下command检查是不是又一堆ds-
,am-
,idm-
的secrets以创建。
kubectl get secrets -n forgerock
部署ForgeRock
现在我们可以开始部署ForgeRock Identity Platform了,这一步非常简单,只需运行:
skaffold dev
部署Ingress Controller
完成以上的部署,接下来就是要浏览https://default.iam.example.com/am
了。但是应该怎样浏览呢?
这里我们就需要Ingress Controller了,我选择了Ngix的Ingress Controller,你可以根据自己需求选择。
这里我们就用官方的部署文件吧:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.1/deploy/static/provider/cloud/deploy.yaml
部署完成后就只需port-forward去Ingress Controller就可以了
kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 80:80
最后一步,设置host文件
想必程序员们对host文件不陌生吧,我们就只需把default.iam.example.com
设成本地解析就可以了。
简单的在C:\Windows\System32\drivers\etc\hosts
文件加一行:
127.0.0.1 default.iam.example.com
现在你就可以浏览 https://default.iam.example.com/am 了。
还差最后一样都东西就是登录用户和密码,哈哈。这里我就不明示怎样创建用户了,你们就琢磨琢磨,如果真的不行就在评论区留言,我会在评论区教你。
总结
经过我不断的尝试,终于找到一个可以部署ForgeOps让在Windows也能实现本地开发。这里就分享给大家,最后ForgeRock需要的内存挺多的,建议大家预留最少9GB的内存来运行。
Top comments (0)