Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

2025-05-29 0 74

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

Linkerd 2.10 中文手册持续修正更新中:

  • https://linkerd.hacker-linner.com

GitOps 是一种使用 Git 作为单一事实来源自动管理和交付 Kubernetes 基础设施和应用程序的方法。它通常利用一些软件代理来检测和协调 Git 中受版本控制的工件与集群中运行的工件之间的任何差异。

本指南将向您展示如何设置 Argo CD 以使用 GitOps 工作流程管理 Linkerd 的安装和升级。

具体来说,本指南提供了有关如何使用 Sealed Secrets 和 cert-manager 安全地生成和管理 Linkerd 的 mTLS 私钥和证书的说明。它还将向您展示如何将 auto proxy injection 功能集成到您的工作流程中。最后,本指南总结了遵循 GitOps 工作流程将 Linkerd 升级到更新版本的步骤。

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

本指南中使用的软件和工具仅用于演示目的。随意选择最适合您要求的其他产品。

您需要按照下一部分中定义的步骤将这个 example repository 克隆到您的本地机器并复制到您的 Kubernetes 集群中。

设置存储库

将示例存储库克隆到本地计算机:

  1. gitclonehttps://github.com/linkerd/linkerd-examples.git

这个存储库将用于演示 Git 操作,如本指南后面的 add、commit 和 push。

向存储库添加一个新的远程端点以指向集群内 Git 服务器,这将在下一节中设置:

  1. cdlinkerd-examples
  2. gitremoteaddgit-servergit://localhost/linkerd-examples.git

为了简化本指南中的步骤,我们将通过端口转发与集群内 Git 服务器进行交互。因此,我们刚刚创建的远程端点以您的 localhost 为目标。

将 Git 服务器部署到集群中的 scm 命名空间:

  1. kubectlapply-fgitops/resources/git-server.yaml

在本指南的后面,Argo CD 将被配置为监视此 Git 服务器托管的存储库。

该 Git 服务器被配置为通过 git 协议作为 daemon 运行,对 Git 数据进行未经身份验证的访问。不建议将此设置用于生产用途。

确认 Git 服务器健康:

  1. kubectl-nscmrolloutstatusdeploy/git-server

将示例存储库克隆到集群内 Git 服务器:

  1. git_server=`kubectl-nscmgetpo-lapp=git-server-oname|awk-F/'{print$2}'`
  2. kubectl-nscmexec"${git_server}"–\\
  3. gitclone–barehttps://github.com/linkerd/linkerd-examples.git

确认远程仓库克隆成功:

  1. kubectl-nscmexec"${git_server}"–ls-al/git/linkerd-examples.git

确认您可以通过端口转发从本地存储库推送到远程存储库:

  1. kubectl-nscmport-forward"${git_server}"9418&
  2. gitpushgit-servermaster

部署 Argo CD

安装 Argo CD

  1. kubectlcreatensargocd
  2. kubectl-nargocdapply-f\\
  3. https://raw.githubusercontent.com/argoproj/argo-cd/v1.6.1/manifests/install.yaml

确认所有 Pod 都准备好了:

  1. fordeployin"application-controller""dex-server""redis""repo-server""server";\\
  2. dokubectl-nargocdrolloutstatusdeploy/argocd-${deploy};\\
  3. done

使用 port-forward 访问 Argo CD 仪表板:

  1. kubectl-nargocdport-forwardsvc/argocd-server8080:443\\
  2. >/dev/null2>&1&

现在可以通过 https://localhost:8080 使用默认的 admin 用户名和 password 访问 Argo CD 仪表板。

默认管理员密码是自动生成的 Argo CD API 服务器 pod 名称。您可以使用 argocd account update-password 命令来更改它。

验证 Argo CD CLI:

  1. argocd_server=`kubectl-nargocdgetpods-lapp.kubernetes.io/name=argocd-server-oname|cut-d'/'-f2`
  2. argocdlogin127.0.0.1:8080\\
  3. –username=admin\\
  4. –password="${argocd_server}"\\
  5. –insecure

配置项目访问和权限

设置 demo project 以对我们的 applications 进行分组:

  1. kubectlapply-fgitops/project.yaml

该项目定义了我们的应用程序可以使用的允许资源种类和目标集群的列表。

确认项目部署正确:

  1. argocdprojgetdemo

在仪表板上:

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

部署应用程序

部署作为所有其他应用程序的 "parent" 应用程序的 main 应用程序:

  1. kubectlapply-fgitops/main.yaml

"app of apps" 模式通常用于 Argo CD 工作流程来引导应用程序。有关更多 信息, 请参阅 Argo CD 文档。

确认 main 应用程序部署成功:

  1. argocdappgetmain

同步 main 应用程序:

  1. argocdappsyncmain

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

请注意,只有 main 应用程序是同步的。

接下来,我们将单独同步其余的应用程序。

部署 cert-manager

同步 cert-manager 应用程序:

  1. argocdappsynccert-manager

由于 cert-manager 0.16.0 和 kubectl <1.19 以及 Argo CD 使用的 Helm 3.2 存在问题, 本指南使用 cert-manager 0.15.0。请参阅 此处 的升级说明。

确认 cert-manager 正在运行:

  1. fordeployin"cert-manager""cert-manager-cainjector""cert-manager-webhook";\\
  2. dokubectl-ncert-managerrolloutstatusdeploy/${deploy};\\
  3. done

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

部署 Sealed Secrets

同步 sealed-secrets 应用程序:

  1. argocdappsyncsealed-secrets

确认 sealed-secrets 正在运行:

  1. kubectl-nkube-systemrolloutstatusdeploy/sealed-secrets

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

创建 mTLS trust anchor

在继续部署 Linkerd 之前,我们需要创建 mTLS 信任锚。然后我们还将设置 linkerd-bootstrap 应用程序来管理信任锚证书。

创建新的 mTLS 信任锚私钥和证书:

  1. stepcertificatecreateroot.linkerd.cluster.localsample-trust.crtsample-trust.key\\
  2. –profileroot-ca\\
  3. –no-password\\
  4. –not-after43800h\\
  5. –insecure

确认新信任锚的详细信息(加密算法、到期日期、SAN 等):

  1. stepcertificateinspectsample-trust.crt

创建一个 SealedSecret 资源来存储加密的信任锚:

  1. kubectl-nlinkerdcreatesecrettlslinkerd-trust-anchor\\
  2. –certsample-trust.crt\\
  3. –keysample-trust.key\\
  4. –dry-run=client-oyaml|\\
  5. kubeseal–controller-name=sealed-secrets-oyaml-|\\
  6. kubectlpatch-f-\\
  7. -p'{"spec":{"template":{"type":"kubernetes.io/tls","metadata":{"labels":{"linkerd.io/control-plane-component":"identity","linkerd.io/control-plane-ns":"linkerd"},"annotations":{"linkerd.io/created-by":"linkerd/clistable-2.8.1","linkerd.io/identity-issuer-expiry":"2021-07-19T20:51:01Z"}}}}}'\\
  8. –dry-run=client\\
  9. –type=merge\\
  10. –local-oyaml>gitops/resources/linkerd/trust-anchor.yaml

这将覆盖本地 gitops/resources/linkerd/trust-anchor.yaml 文件中 现有的 SealedSecret 资源。我们会将此更改推送到集群内 Git 服务器。

确认只更改了 spec.encryptedData:

  1. gitdiffgitops/resources/linkerd/trust-anchor.yaml

提交并将新的信任锚 secret 推送到您的集群内 Git 服务器:

git add gitops/resources/linkerd/trust-anchor.y

  1. gitaddgitops/resources/linkerd/trust-anchor.yaml
  2. gitcommit-m"updateencryptedtrustanchor"
  3. gitpushgit-servermaster

确认提交成功推送:

  1. kubectl-nscmexec"${git_server}"–git–git-dirlinkerd-examples.gitlog-1

部署 linkerd-bootstrap

同步 linkerd-bootstrap 应用程序:

  1. argocdappsynclinkerd-bootstrap

如果颁发者和证书资源出现降级状态,则 SealedSecrets 控制器可能无法解密 sealed 的 linkerd-trust-anchor secret。检查 SealedSecrets 控制器以获取错误日志。

出于调试目的,可以使用 kubectl -n linkerd get sealedsecrets linkerd-trust-anchor -oyaml 命令 检索 sealed resource。确保此资源与您之前推送到集群内 Git 服务器 的 gitops/resources/linkerd/trust-anchor.yaml 文件匹配。

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

SealedSecrets 应该已经创建了一个包含解密信任锚的 secret。从 secret 中检索解密的信任锚:

  1. trust_anchor=`kubectl-nlinkerdgetsecretlinkerd-trust-anchor-ojsonpath="{.data['tls\\.crt']}"|base64-d-w0-`

确认它与您之前在本地 sample-trust.crt 文件中创建的解密信任锚证书匹配:

  1. diff-b\\
  2. <(echo"${trust_anchor}"|stepcertificateinspect-)\\
  3. <(stepcertificateinspectsample-trust.crt)

部署 Linkerd

现在我们准备安装 Linkerd。我们刚刚检索到的解密信任锚 将使用 identityTrustAnchorsPEM 参数传递给安装过程。

在安装 Linkerd 之前,请注意 gloval.identityTrustAnchorsPEM 参数设置 为 "empty" 证书字符串:

  1. argocdappgetlinkerd-ojson|\\
  2. jq-r'.spec.source.helm.parameters[]|select(.name=="identityTrustAnchorsPEM")|.value'

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

我们将在 linkerd 应用程序中使用 ${trust_anchor} 的值覆盖此参数。

在你的本地 gitops/argo-apps/linkerd.yaml 文件中找到 identityTrustAnchorsPEM 变量, 并将其 value 设置为 ${trust_anchor} 的值。

确保多行字符串缩进正确。例如。,

  1. source:
  2. chart:linkerd2
  3. repoURL:https://helm.linkerd.io/stable
  4. targetRevision:2.8.0
  5. helm:
  6. parameters:
  7. name:identityTrustAnchorsPEM
  8. value:|
  9. —–BEGINCERTIFICATE—–
  10. MIIBlTCCATygAwIBAgIRAKQr9ASqULvXDeyWpY1LJUQwCgYIKoZIzj0EAwIwKTEn
  11. MCUGA1UEAxMeaWRlbnRpdHkubGlua2VyZC5jbHVzdGVyLmxvY2FsMB4XDTIwMDkx
  12. ODIwMTAxMFoXDTI1MDkxNzIwMTAxMFowKTEnMCUGA1UEAxMeaWRlbnRpdHkubGlu
  13. a2VyZC5jbHVzdGVyLmxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+PUp
  14. IR74PsU+geheoyseycyquYyes5eeksIb5FDm8ptOXQ2xPcBpvesZkj6uIyS3k4qV
  15. E0S9VtMmHNeycL7446NFMEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYB
  16. Af8CAQEwHQYDVR0OBBYEFHypCh7hiSLNxsKhMylQgqD9t7NNMAoGCCqGSM49BAMC
  17. A0cAMEQCIEWhI86bXWEd4wKTnG07hBfBuVCT0bxopaYnn3wRFx7UAiAwXyh5uaVg
  18. MwCC5xL+PM+bm3PRqtrmI6TocWH07GbMxg==
  19. —–ENDCERTIFICATE—–

确认只更改了一个 spec.source.helm.parameters.value 字段:

  1. gitdiffgitops/argo-apps/linkerd.yaml

提交并将更改推送到 Git 服务器:

  1. gitaddgitops/argo-apps/linkerd.yaml
  2. gitcommit-m"setidentityTrustAnchorsPEMparameter"
  3. gitpushgit-servermaster

同步 main 应用程序:

  1. argocdappsyncmain

确认新的信任锚被 linkerd 应用程序选中:

  1. argocdappgetlinkerd-ojson|\\
  2. jq-r'.spec.source.helm.parameters[]|select(.name=="identityTrustAnchorsPEM")|.value'

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

同步 linkerd 应用程序:

  1. argocdappsynclinkerd

检查 Linkerd 是否准备就绪:

  1. linkerdcheck

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

用 emojivoto 测试

部署 emojivoto 来测试自动代理注入:

  1. argocdappsyncemojivoto

检查应用程序是否健康:

  1. fordeployin"emoji""vote-bot""voting""web";\\
  2. dokubectl-nemojivotorolloutstatusdeploy/${deploy};\\
  3. done

Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

将 Linkerd 升级到 2.8.1

使用您的编辑器将 gitops/argo-apps/linkerd.yaml 文件中 的 spec.source.targetRevision 字段更改为 2.8.1:

确认只更改了 targetRevision 字段:

  1. gitdiffgitops/argo-apps/linkerd.yaml

提交并将此更改推送到 Git 服务器:

  1. gitaddgitops/argo-apps/linkerd.yaml
  2. gitcommit-m"upgradeLinkerdto2.8.1"
  3. gitpushgit-servermaster

同步 main 应用程序:

  1. argocdappsyncmain

同步 linkerd 应用程序:

  1. argocdappsynclinkerd

确认升级成功完成:

  1. linkerdcheck

确认控制平面的新版本:

  1. linkerdversion

清理

所有应用程序都可以通过删除 main 应用程序来删除:

  1. argocdappdeletemain–cascade=true

原文链接:https://mp.weixin.qq.com/s/BNdL4JszXJ3pkIeXsK58HA

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Linked 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用 https://www.kuaiidc.com/92031.html

相关文章

发表评论
暂无评论