Free Arch: 将 IdentityServer 部署到 Okteto
部署了一个免费的 IdentityServer 实例: https://id6-jeff-tian.cloud.okteto.net/
相关代码提交一共 3 个,以这个为主:
(相关资料图)
https://github.com/Jeff-Tian/IdentityServer/commit/b40e6c6f8e4193ef459ab558a102f84442b3cede
前情提要早在《身份验证哪家强?Identity Server 初体验》中,就部署了一个免费的 IdentityServer 实例,托管在 Azure 上: https://id6.azurewebsites.net/。
后来,我宣称 Free Arch 要狡兔三窟,多处部署:《Free Arch: 狡兔三窟,多处部署》。今天,就来给 IdentityServer 这个实例,添加一个分身,从此不局限于 Azure 平台。就详述一下部署将它部署到 Okteto 的步骤。由于采用了 OAM,不需要太多工作,就能参考前文,将它部署到 Napptive 等任何 Kubernetes 集群里。
第一步,容器化这是一个 ASP.NET Core 项目,从官方的开源仓库 fork 过来后做了一些魔改,源代码在: https://github.com/Jeff-Tian/IdentityServer。其 Dockerfile 如下:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS baseWORKDIR /appEXPOSE 5000EXPOSE 5001FROM mcr.microsoft.com/dotnet/sdk:6.0 AS buildWORKDIR /srcCOPY . .RUN dotnet restore "hosts/main/Host.Main.csproj"RUN dotnet build hosts/main/Host.Main.csproj -c Release -o /app/buildFROM build AS publishRUN dotnet publish hosts/main/Host.Main.csproj -c Release -o /app/publishFROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "Host.Main.dll"]第二步,构建镜像并上传至 Docker Registry
为了能够自动在 github actions 的 cicd 过程中自动进行这一步,我们把手动执行的命令放在一个文件里: .github/ci.sh。这一步的提交见:
https://github.com/Jeff-Tian/IdentityServer/commit/3db4235f5e091cda1d2752a8f61df5a9fddbd2b4。
docker build -t jefftian/id6 .docker imagesdocker run --network host -e CI=true -d -p 127.0.0.1:5000:5000 --name id6 jefftian/id6docker ps | grep -q id6docker ps -aqf "name=id6"docker push jefftian/id6docker logs $(docker ps -aqf "name=id6$")curl localhost:5000 || docker logs $(docker ps -aqf "name=id6$")docker kill id6 || echo "id6 killed"docker rm id6 || echo "id6 removed"第三步,准备数据库
本 IdentityServer 使用了 PostgreSQL 数据库。如何拥有一个免费的 PostgreSQL 数据库服务?如果喜欢自己部署,仍然可以利用 Okteto,参考:《Free Arch: 在 Okteto 上部署 backstage (第一部分: PostgreSQL)》。
当然,也可以使用别人部署好的免费 PostgreSQL 服务,比如 app.nhost.io 提供的服务就不错。
为了验证数据库连接正常,本 IdenityServer 只是连接了数据库,并且执行了一个空的 EF Migration,在本地使用 docker compose 验证了成功执行了 Migration:
这个 docker compose 文件如下:
version: "3"services:postgres:image: "postgres"ports:- "5432:5432"environment:POSTGRES_DB: id6POSTGRES_USER: postgresPOSTGRES_PASSWORD: nopwdvolumes:- pg:/var/lib/postgresql/dataadminer:image: library/adminer:latestrestart: alwaysports:- 7777:8080volumes:pg: ~
由于依赖了数据库,在本地运行本 IdentityServer 实例,需要:
docker compose up -ddotnet run --project hosts/main/Host.Main.csproj
最终部署后,它会在线上的数据库里也创建出一个 __EFMigrationHistory 表,如果是使用了 app.nhost.io 的服务,可以使用其提供的 Hasura 验证:
第四步,加密敏感信息这就是前面提到的主要的提交。再一次使用了 SOPS,对 SOPS 步骤的详细介绍参考《[Free Arch: 在 Okteto 上部署 backstage(第二部分) - Jeff Tian的文章 - 知乎 ](https://zhuanlan.zhihu.com/p/590640020) 》。要使用它,需要在项目根目录添加一个 .sops.yaml文件:
creation_rules:# If assuming roles for another account use "arn+role_arn".# See Advanced usage- path_regex: k8s\/app\/secrets\.yaml$kms: "arn:aws:kms:us-east-1:443862765029:key/b1739688-ec15-407d-895d-d05ca1217a2f"aws_profile: lambda-doc-rotary
在 k8s/app/secrets.yaml添加数据库连接信息:
apiVersion: v1kind: Secretmetadata:name: id6labels:branch: maintype: OpaquestringData:DatabaseHost: xxxDatabasePort: "5432"DatabaseUser: postgresDatabasePassword: yyyDatabaseName: zzz第五步,添加 k8s 相关的描述文件
这一步,基本上和《[Free Arch: 在 Okteto 上部署 backstage(第二部分) - Jeff Tian的文章 - 知乎](https://zhuanlan.zhihu.com/p/590640020) 》相同。一个显著不同的是在开启 Ingress 这里,这次没有使用自动 Ingress,而是专门添加了一个 Ingress.yaml 描述文件:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: id6annotations:dev.okteto.com/generate-host: id6spec:rules:- http:paths:- backend:service:name: id6port:number: 80path: /pathType: ImplementationSpecific
这一点在那篇文章有提及,但这次算是真的补上了这个公开示例。
相比上文,其他的改进点在 deployment.yaml 文件中添加了 replicas,并指定了 2,使得同时有 2 个 pod 运行。
其他文件略过,在此不表。最终需要在 .github/workflows 文件夹下添加一个 cicd 的描述文件:
name: cicdon:push:branches: [ "main" ]pull_request:branches: [ "main" ]schedule:- cron: "0 */12 * * *"jobs:deploy-okteto:runs-on: ubuntu-latestneeds: buildsteps:- uses: actions/checkout@v3- run: curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl- run: chmod +x ./kubectl- run: sudo mv ./kubectl /usr/local/bin/kubectl- run: mkdir ${HOME}/.kube&&mkdir ${HOME}/.aws- run: npm i -g k8ss- run: echo -e "machine github.com\n login ${{secrets.GH_TOKEN}}" > ~/.netrc- run: echo -e "[lambda-doc-rotary]\naws_access_key_id = ${{secrets.AWS_ACCESS_KEY}}\naws_secret_access_key = ${{secrets.AWS_SECRET_KEY}}\n" > ~/.aws/config- run: wget https://github.com/mozilla/sops/releases/download/v3.7.3/sops-v3.7.3.linux.amd64- run: sudo cp sops-v3.7.3.linux.amd64 /usr/local/bin/sops- run: sudo chmod +x /usr/local/bin/sops- run: git clone https://github.com/Jeff-Tian/k8s-config.git ${HOME}/k8s-config- run: k8ss switch --cluster=okteto --namespace=jeff-tian- run: sops -d k8s/app/secrets.yaml --aws-profile lambda-doc-rotary | kubectl apply -f -- run: kubectl apply -k k8s/app&&kubectl rollout restart deploy id6build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v3- run: echo "${{secrets.DOCKER_PASSWORD}}" | docker login -u "${{secrets.DOCKER_USERNAME}}" --password-stdin- run: sh .github/ci.sh
注意在这个文件里,依赖了多个环境变量,这需要添加在 github 代码仓库的 secrets 里:
第六步,没有第六步了!提交代码,等待 Actions 跑完:
IdentityServer 的第二个分身上线了!
标签:
推荐文章
- Free Arch: 将 IdentityServer 部署到 Okteto
- 全球速看:无偿献血公告
- 环球今日报丨上汽集团:三年内新能源车销量占比将“翻一番”
- 京东科技CEO李娅云:数智供应链为核,构建绿色经济增长新范式
- 西裤不能用洗衣机洗吗 洗衣机可以洗西裤吗
- 万科祝九胜:希望借助发行股份优化资产结构 降低融资成本
- 每日简讯:“冀”录乡愁丨酥到骨头里的家乡味
- 政策持续发力 拓展新就业形态发展空间
- 微粒贷网贷逾期10天影响征信吗
- 报道:俄媒:5名俄罗斯人疑因秘密采购西方电子设备面临30年监禁
- 天天热头条丨天壕新能定向发行163.93万股股份募资总额1500万元
- 洛阳高新警方破获一起网络交友诈骗案件
- 全球快看点丨成渝企业登记档案“掌上”异地一键通查上线
- 【热闻】走出国门!盛剑环境中标越南电池G5项目废气处理系统
- 天天要闻:正邦科技(002157)11月16日主力资金净卖出2282.53万元
- 今日要闻!俄外交部:俄罗斯就无偿供应化肥问题与非盟接触 俄方愿提供运输服务
- 环球通讯!宁德时代投资设立新公司,经营范围含新能源汽车换电设施销售
- 冀东水泥(000401)12月9日主力资金净卖出193.92万元
- 港交所(00388.HK):明年2月23日举行董事会会议审批全年业绩
- 赛托生物董秘回复:公司双降醇产品为生产黄体酮的原料,双降醇为公司发酵类五大母核产品之一
- 天天头条:航天宏图(688066)12月6日主力资金净买入1432.70万元
- “6·18”:电商卖力 短视频平台虎视眈眈
- 恐龙呼吸道感染首个证据发现 几万年前的恐龙也患感冒
- 新版控烟条例效果如何?禁烟区依然烟熏火燎
- 环球影城过山车突然停驶 游客被困十米高
- 新疆阿克苏地区库车市发生4.1级地震 震源深度21千米
- 从东北到西北 他在“军垦第一城”规划着城建未来
- 西藏米林“家庭农场”:引领种植产业 助力乡村振兴
- 台风“圆规”携风裹雨来袭 广东深圳、珠海等地停课停工
- 哈尔滨市新增治愈出院本土新冠肺炎确诊病例8例
- 台风“圆规”将登陆 广东多地停课停工
- 大雨洪水中的这7个瞬间,让我们流泪了……
- 还在打赏假脸女主播?来看视频“变装秀”
- 媒体记者赞开封古城墙夜景 宛如时空隧道式“穿越”体验
- 山西大同:受近期气温骤降影响 11日起陆续供暖
- 粤启动最高标准防御台风“圆规” 深圳珠海等多地停课停工
- 吴谢宇称死刑“量刑太重”上诉 二审新增一名辩护律师
- 上海率先出台《住宅装饰装修质量验收规范》团体标准
- 西藏普兰边检民警:让孤寡老人迎来有“儿女”陪伴的温馨重阳节
- 福建发布台风黄色预警信号 福州海警守护辖区渔船民安全
- 亲身感受技能魅力和力量 近40位外交官在沪“走进世赛”
- 生物多样性“家谱”扩容 杭州桐庐发现低危新记录种天目臭蛙
- 台风“圆规”给福建带来风雨影响 福建转移近3万人
- 有助降低农业磷肥施用 科研人员在植物磷营养吸收上取得新发现
- 风雨无情,携手共“晋”
- 晋陕全力做好防汛救灾 恢复生产工作
- 风雨同舟 谱写抗洪壮歌
- 雷锋精神:做“永不生锈的螺丝钉”
- 广西新增境外输入确诊病例8例 新增境外输入无症状感染者1例
- “圆规”加强为台风级 将在海南琼海到陵水一带沿海登陆
- 台风“圆规”致海南进出岛客运暂停
- 河南卫辉村民抢收蔬菜捐赠山西:俺分文不要
- 海河流域上游强降雨后泄洪 洪峰预计今晚进入天津
- 激流勇“晋”!一组谐音成语致敬山西
最新资讯
- 哈尔滨多地风险等级调整为低风险
- “圆规”加强为台风级 中央气象台发布台风橙色预警
- 台风“圆规”将登陆 较强冷空气将影响我国大部地区
- 关乎教育公平感 禁止收集家长职务信息该成为明规则
- 为了百分之五的孩子:残疾儿童如何接受九年义务教育?
- 学生被家暴学校却保持缄默?强制报告制度还需更多配套
- 收养12个患病弃婴 在这个家庭亲情不一定与血缘联系
- 北京秋雨又上线夜间大部有小雨 15日起大风降温来袭
- 这些“反诈App”,关键时刻或能帮上你
- 绥化“战疫”,有群“做好事上瘾”的年轻人助攻
- 骗财、自杀、诱奸……四个关于“饭圈女孩”的故事
- 落马官员违纪违法:自认国企特殊 享乐放纵迷打球
- 既要“富口袋”也要“富脑袋”
- 文化场馆活动 展现多彩魅力
- 教培退潮,成人职教成为培训机构入局、转型热门选项
- 在“未来工厂”,老师傅变身“新工人”
- 1738元机票提前10天退竟要扣1182元退票费
- 3小时话剧《长安第二碗》浓缩40年来时代巨变
- 家庭养老床位“无人照护如有人” 安装适老智能设备 24小时远程监护
- 1000度近视坐过山车致视网膜脱落 眼科专家:高度近视用力咳嗽、打喷嚏都有可能造成悲剧
- 2021年中国汽车行业用户满意度指数测评结果发布
- 挪用公款并收受别墅 是否应并罚
- 面对气候变化,文物保护要有前瞻性
- 厦门做细文化遗产保护监督 联合会商促整改
- 国道244陕西留坝县武关驿段出现山体塌方
- 人工智能+3D打印,做出一口好“牙”
- 大熊猫国家公园正式设立 四年试点受益的不仅是大熊猫
- 解密《长津湖》《火红年华》共同的DNA 以真实人物为原型
- 161天减重31.2斤! 41岁癌症晚期男子惊艳健美大赛舞台
- 成都中小学劳动教育纳入必修课 每周不少于1课时
- 郑州追征一网红600多万元税款 网络主播补税潮要来了?
- 我国正式设立首批五个国家公园 大熊猫国家公园“转正”
- 大熊猫的故乡藏着哪些“生物多样性”密码?
- 车祸需赔5.3万余元,他打零工10余年终还清
- 中外院士“智汇”成都 带来人工智能最新突破方向
- 成都已建成783条“回家的路” 条条通往幸福
- 电价只降不升预期打破 限制高耗能产业盲目发展
- 山西临时救助受灾困难群众4.3万人
- “电荒”阵痛 电价松绑
- 油荒气荒电荒频现,绿电能否扛大梁?
- 前三季度新登记新能源汽车同比增178.49%
- 北京东西城“罚教管”综合治理斑马线 机动车礼让渐成习惯
- 野生象群对人类的信任在逐渐增加
- 首批5个国家公园正式设立 涉及10省区保护面积达23万平方公里
- 网红补税第一案曝光,大数据为税收公平赋能
- 别轻易让杜嘉班纳在中国市场卷土重来
- 电力市场化改革,不是简单粗暴“涨电价”
- 对“应付检查式”消防品,不能应付式监督
- 联想控股否认柳传志1亿年薪
- 都市青年生活态度:拥护“性价比之王” 向往田园生活