DEV Community

[yun]
[yun]

Posted on

如何用Windows下的Docker Desktop Kubernetes部署ForgeOps 7.2来实现本地开发

前言

ForgeRock官方提供了一个DevOps方案(ForgeOps)用于展示如何部署ForgeRock Identity Platform在Kubernetes里。

很遗憾的在官方CDK文档并没有教在Windows里的Docker Desktop Kubernetesminikube部署ForgeOps。官方给的方案是运行一个Linux虚拟机,比如使用Hyper-V, VMWare Player 或 VMWare Workstation运行Ubuntu,然后在Linux虚拟机里使用minikube来部署ForgeOps。

我个人认为为了实现本地开发而运行一个虚拟机实在是费资源。既然ForgeOps是展示在Kurbenetes上运行的,原理上无论在什么操作系统,只要我能部署一个Kubernetes cluster,我就应该能部署ForgeOps给的配置。

这里我们就尝试在Windows下的Docker Desktop Kubernetes部署ForgeOps。

安装需要的软件

如果你比较熟悉Kubernetes,其他一些小工具比如kubectxkubens可以选择性安装。这些小工具可以提高工作效率,在这个部署中不是必要工具。

安装Docker Desktop并开启Kubernetes功能

安装我想应该非常简单,就不必我一步步指吧。在安装过程中会有一个选项询问是否要开启Kubernetes功能,只需打勾就好了。
如何你在安装中错过了,或早已安装了Docker Desktop的,就去设置目录开启Kubernetes功能就好了。
Image description

下载ForgeOps 7.2 Github源码

这里要注意每个版本的部署方式都有些许不同,这里我使用的是release/7.2.0版本。但部署原理都是一样的,只要你掌握的原理,你就可以跟着不同版本的需要做些改动来完成部署。

如果你有用Github Desktop,只需在UI上点几个button就可以下载了。
这里我用git来下载源码:

git clone https://github.com/ForgeRock/forgeops.git
cd forgeops
Enter fullscreen mode Exit fullscreen mode

处理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 {} \;
Enter fullscreen mode Exit fullscreen mode

更改imagePullPolicy

我们将使用forgeops提供的skaffold yaml来进行部署,这个skaffold包括了创建custom docker image,并用custom docker image进行部署。

然而,forgeops提供的kubernetes部署yaml都是用imagePullPolicy: Always,如果你部署在本地的Kubernetes,它会一直尝试从互联网下载image,而导致ErrImgPull image不能被下载。

这里我们就需要把所有的imagePullPolicyAlways改去IfNotPresentNever,这样本地Kubernetes就会优先从本地查找image。

批量更改的方法很多,你就用你最适应的方法去改吧。我的方法是使用VS Code打开forgeops文件夹,然后使用Search & Replace功能,把imagePullPolicy: Always批量replace成imagePullPolicy: IfNotPresent

检查Kubernetes

源文件的准备工作到这里就好了,现在要检查你的Kubernetes和安装的CLI能否运行。

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

运行以上这个command你应该会得到docker-desktop,然后status应该要是Ready

现在就可以创建新的namespace了,这个namespace主要是用来分开ForgeRock的应用以方便我们查看。

kubectl create ns forgerock
Enter fullscreen mode Exit fullscreen mode

如果你有用kubens,也可以把forgerock设置成默认namespace:

kubens forgerock
Enter fullscreen mode Exit fullscreen mode

然后检查所有所需的工具能正常运行

helm
skaffold
Enter fullscreen mode Exit fullscreen mode

部署secret agent和cert manager

根据官方CDK Architecture文档,ForgeRock Identity Platform还需要secret agentcert managerDS operator

DS Operator我就不部署了,应该这个主要是用于backup和restore DS的资料,本地开发应该没用。如果你有需要也可以跟着secret agentcert 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
Enter fullscreen mode Exit fullscreen mode

运行后就可以检查用kubectl get ns command检查secret-agent-system namespace是否已经创建。并检查secret-agent-controller-manager是 READY 1/1 的状体:

kubectl get deployment -n secret-agent-system
Enter fullscreen mode Exit fullscreen mode

部署cert manager

ForgeOps是用开源的cert-manager.io来管理证书。forgeops也提供一个bash script方便使用helm来部署cert-manager

这里我们可以利用git-bash来运行这个bash script:

./bin/certmanager-deploy.sh
Enter fullscreen mode Exit fullscreen mode

运行完成后也是检查下cert-manager的status:

kubectl get deployment -n cert-manager
Enter fullscreen mode Exit fullscreen mode

创建secrets

ForgeRock Identity Platform里用到大量的secrets,如果要一个一个创建不但麻烦费时也很复杂。这里forgeops以提供的Kustomize部署文件利用secret agent来创建需要的secrets:

kubectl apply -k .\kustomize\base\secrets -n forgerock
Enter fullscreen mode Exit fullscreen mode

部署完成后,用以下command检查是不是又一堆ds-am-idm-的secrets以创建。

kubectl get secrets -n forgerock
Enter fullscreen mode Exit fullscreen mode

部署ForgeRock

现在我们可以开始部署ForgeRock Identity Platform了,这一步非常简单,只需运行:

skaffold dev
Enter fullscreen mode Exit fullscreen mode

部署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
Enter fullscreen mode Exit fullscreen mode

部署完成后就只需port-forward去Ingress Controller就可以了

kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 80:80
Enter fullscreen mode Exit fullscreen mode

最后一步,设置host文件

想必程序员们对host文件不陌生吧,我们就只需把default.iam.example.com设成本地解析就可以了。
简单的在C:\Windows\System32\drivers\etc\hosts文件加一行:

127.0.0.1 default.iam.example.com
Enter fullscreen mode Exit fullscreen mode

现在你就可以浏览 https://default.iam.example.com/am 了。

Image description

还差最后一样都东西就是登录用户和密码,哈哈。这里我就不明示怎样创建用户了,你们就琢磨琢磨,如果真的不行就在评论区留言,我会在评论区教你。

总结

经过我不断的尝试,终于找到一个可以部署ForgeOps让在Windows也能实现本地开发。这里就分享给大家,最后ForgeRock需要的内存挺多的,建议大家预留最少9GB的内存来运行。

Top comments (0)