”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 在 Kubernetes 上设置 JFrog Artifactory 并连接 Spring Boot 应用程序

在 Kubernetes 上设置 JFrog Artifactory 并连接 Spring Boot 应用程序

发布于2024-11-08
浏览:824

本文档提供有关在 Kubernetes 集群中设置 JFrog Artifactory 的指南。它作为开发人员在本地计算机上运行的 Kubernetes 环境上安装和配置 JFrog 的基本教程。

设置本地环境来构建DevOps资源

我使用 Docker 容器为多个应用程序设置工作环境(Setup Environment)。这种方法确保了应用程序开发的环境完全隔离且可维护,使我们能够轻松启动和终止这些环境。下面是创建环境的Docker命令。

docker run -it --name test-jfrog-envornment-box -v ${HOME}/root/ -v ${PWD}/work -w /work --net host developerhelperhub/kub-terr-work-env-box sh

容器包含 Docker、Kubectl、Helm、Terraform、Kind、Git

在 Kubernetes 集群上设置 Jenkins

我已经创建了所有 Terraform 脚本,这些脚本可在 GitHub 存储库中找到。您可以在 Kubernetes 集群上下载并设置 Jenkins,该集群在 Docker 容器中本地运行。

将存储库克隆到本地 Linux 计算机上以开始使用。

git clone https://github.com/developerhelperhub/kuberentes-help.git
cd kuberentes-help/kubenretes/tutorials/sections/0009/

使用 Kind 在 Docker 容器中设置 Kubernetes 集群,将集群命名为“devops-jfrog-cluster-control-plane” 该集群支持入口并公开端口 80 和 443 以允许访问服务来自集群外部。

集群创建 terraform 脚本在 kind 文件夹下可用

cd kind
terraform init #Install the required providers to set up the necessary resources.
terraform plan #Verify the resources that will be installed on the system.
terraform apply #Install resources on the system

以下命令验证集群

kubectl cluster-info
kubectl get nodes -o wide

在 Kubernetes 集群上设置 Nginx 入口控制器
NGINX Ingress Controller 用于管理 Kubernetes 集群中服务的外部访问。它充当 Kubernetes 应用程序的入口点,将外部 HTTP 和 HTTPS 流量路由到集群内的适当服务。

以下命令在集群上安装入口控制器

Ingress 创建脚本可在“ingress”文件夹下使用

cd ingress
kubectl apply -f ingress-nginx.yaml

以下命令验证 nginx 入口控制器

kubectl get -n ingress-nginx pod

输出

NAME                                       READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-5mt2k       0/1     Completed   0          53s
ingress-nginx-admission-patch-w2rlk        0/1     Completed   0          53s
ingress-nginx-controller-d45d995d4-gl65h   1/1     Running     0          53s

设置 JFrog Artifactory OSS(开源)

添加 JFrog Artifactory OSS 社区 Helm 存储库:首先,您需要将 JFrog Artifactory OSS 社区 Helm 存储库添加到您的 Helm 客户端:

注意:JFrog 在“jfrog”文件夹下创建可用脚本

helm repo add jfrog https://charts.jfrog.io
helm repo update

以下命令可用于验证集群中安装的服务的app版本和chart版本:

helm search repo  artifactory-oss

在此示例中,我安装的购物车版本为“107.90.8”,应用程序版本为“7.90.8”

NAME                         CHART VERSION        APP VERSION        DESCRIPTION
jfrog/artifactory-oss        107.90.8             7.90.8             JFrog Artifactory OSS

创建一个名为 helm-value.yaml 的 Helm 值 YAML 文件,该文件将用于配置 JFrog Artifactory OSS 服务。 Helm 将使用此配置文件在集群中安装服务。

artifactory:
    postgresql:
    postgresqlPassword: postgres_password
    nginx:
    enabled: false
    ingress:
    enabled: false

上面的配置中,我配置了以下几点:

  • Helm 使用默认的 PostgreSQL 数据库,我在其中指定了数据库密码。
  • NGINX 和 Ingress 资源被禁用。

以下 Helm 命令用于在集群中安装 Artifactory。它在集群中创建必要的资源,包括名为“artifactory-oss”的命名空间,并安装此命名空间内的所有资源。

helm install artifactory-oss -f helm-value.yaml jfrog/artifactory-oss --namespace artifactory-oss --create-namespace

Helm 图表值:https://github.com/jfrog/charts/blob/master/stable/artifactory-oss/values.yaml

我们可以验证所有资源都已安装在“artifactory-oss”命名空间中。 Artifactory 服务 UI 运行在端口 8082 上,而 Artifactory 本身运行在端口 8081 上。

kubectl get -n artifactory-oss all

NAME                               READY   STATUS    RESTARTS   AGE
pod/artifactory-oss-0              0/7     Running   0          3m19s
pod/artifactory-oss-postgresql-0   1/1     Running   0          3m19s

NAME                                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/artifactory-oss                       ClusterIP   10.96.170.63           8082/TCP,8025/TCP,8081/TCP   3m19s
service/artifactory-oss-postgresql            ClusterIP   10.96.95.36            5432/TCP                     3m19s
service/artifactory-oss-postgresql-headless   ClusterIP   None                   5432/TCP                     3m19s

NAME                                          READY   AGE
statefulset.apps/artifactory-oss              0/1     3m19s
statefulset.apps/artifactory-oss-postgresql   1/1     3m19s

我们需要创建一个 Ingress 资源来将请求路由到 Artifactory 服务。在ingress-resource.yaml文件中添加以下配置。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
    name: jfrog-ingress
    namespace: artifactory-oss
    annotations:
    nginx.ingress.kubernetes.io/proxy-body-size: "0"
spec:
    ingressClassName: nginx
    rules:
    - host: jfrog.artifactory.devops.myapp.com
        http:
        paths:
            - path: /
            pathType: ImplementationSpecific
            backend:
                service:
                name: artifactory-oss
                port:
                    number: 8082

我们需要配置proxy-body-size=0。此设置指示 Ingress 在上传文件到 Artifactory 时不对文件大小施加限制。

执行以下命令,在集群中应用ingress

kubectl apply -f ingress-resource.yaml

验证 IP 地址是否已设置:

kubectl -n artifactory-oss get ingress

NAME            CLASS   HOSTS                                ADDRESS     PORTS   AGE
jfrog-ingress   nginx   jfrog.artifactory.devops.myapp.com   localhost   80      2m53s

将我们的域添加到本地计算机上的 /etc/hosts 文件的底部。此配置不应位于我们工作的 Linux 盒子“test-jfrog-enornment-box”内;它应该应用于您个人计算机的 /etc/hosts 文件。
(您需要管理员权限):

127.0.0.1 jfrog.artifactory.devops.myapp.com

我们可以在浏览器“http://jfrog.artifactory.devops.myapp.com/”中打开artifactory UI

Setup JFrog Artifactory on Kubernetes and Connect Spring Boot Application

您可以使用默认用户名“admin”和密码“password”登录。首次登录时,Artifactory 会提示您更改默认密码。请务必更新密码,将基本 URL 设置为 http://jfrog.artifactory.devops.myapp.com(在 Artifactory Ingress 资源中配置的域),并跳过任何其他初始配置步骤。

我们可以创建初始存储库配置以将依赖项和二进制文件推送到工件中。

导航到“Artifactory → Artifacts → Manage Repositories → Create Repository”并创建以下存储库:

  • 本地:此存储库管理您的应用程序二进制文件。例如“我的应用程序快照”
  • 远程:此存储库存储应用程序中使用的所有依赖项,这些依赖项将从中央存储库下载并存储在存储库中。例如“我的应用程序中央快照”
  • 虚拟:此虚拟存储库提供聚合“本地”和“远程”存储库的公共端点。该端点将在您的应用程序中配置。 “我的应用程序虚拟快照”

我正在使用maven存储库来维护存储库。以下配置我们必须提供“my-app-snapshot”本地存储库

Setup JFrog Artifactory on Kubernetes and Connect Spring Boot Application

以下配置我们必须提供“my-app-central-snapshot”本地存储库

Setup JFrog Artifactory on Kubernetes and Connect Spring Boot Application

以下配置我们必须提供“my-app-virtual-snapshot”本地存储库

Setup JFrog Artifactory on Kubernetes and Connect Spring Boot Application

Setup JFrog Artifactory on Kubernetes and Connect Spring Boot Application

将本地和远程仓库添加到虚拟仓库中,并在“默认部署仓库”中选择本地仓库。

创建所有存储库后,您可以在“Artifactory → Artifacts”下的主要部分中查看它们。虚拟 URL http://jfrog.artifactory.devops.myapp.com/artifactory/my-app-virtual-snapshot/ 将用于您的 Maven 应用程序。

Setup JFrog Artifactory on Kubernetes and Connect Spring Boot Application

我们需要在 Maven 设置配置文件“~/.m2/settings.xml”中配置身份验证详细信息,以使您的 Maven 应用程序能够通过 Artifactory 进行身份验证。

my-app-virtual-snapshotadminGive your artifactory admin passoword

注意:管理员用户不应用于 UI 和 Artifactory 访问。相反,创建一个具有适当权限的自定义用户,可以在 Artifactory 中进行读写。

我们已经在我们的 Maven 应用程序 POM XML 文件中配置了 Maven 存储库和分发管理标签

falsemy-app-virtual-snapshotmy-app-virtual-snapshothttp://jfrog.artifactory.devops.myapp.com/artifactory/my-app-virtual-snapshot/defaultmy-app-virtual-snapshotmy-app-virtual-snapshothttp://jfrog.artifactory.devops.myapp.com/artifactory/my-app-virtual-snapshot/default

我们可以使用以下命令部署maven应用程序

mvn clean deploy

我们可以得到maven的如下输出:

Setup JFrog Artifactory on Kubernetes and Connect Spring Boot Application

参考 Git Repo

  • https://github.com/developerhelperhub/spring-boot-jfrog-artifact-app
  • https://github.com/developerhelperhub/kuberentes-help/tree/main/kubenretes/tutorials/sections/0009
版本声明 本文转载于:https://dev.to/binoy_59380e698d318/setup-jfrog-artifactory-on-kubernetes-and-connect-spring-boot-application-1n4c?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何获取 Windows/IIS 服务器上的完整 URL 以进行准确重定向?
    如何获取 Windows/IIS 服务器上的完整 URL 以进行准确重定向?
    获取 Windows/IIS 服务器上当前页面的完整 URL在 Windows/IIS 服务器上管理重定向时,捕获至关重要完整的 URL 以确保准确性。然而,此任务可能会带来挑战,特别是在处理移动到新文件夹位置的 WordPress 安装时。遇到的一个挑战是 $_SERVER["REQUE...
    编程 发布于2024-11-08
  • 如何通过 Matplotlib 的面向对象方法使用 Seaborn 可视化?
    如何通过 Matplotlib 的面向对象方法使用 Seaborn 可视化?
    以面向对象的风格使用 Seaborn 进行绘图可视化Seaborn 是一个广泛使用的用于数据可视化的 Python 包,它利用 Matplotlib 库。通过提供面向对象的接口,Matplotlib 有助于复杂绘图的创建和管理。本文讨论了如何利用seaborn的功能,同时保持Matplotlib的面...
    编程 发布于2024-11-08
  • 如何解决 Webpack 和 Babel 的“You May Need an Appropriate Loader”错误?
    如何解决 Webpack 和 Babel 的“You May Need an Appropriate Loader”错误?
    解决 Webpack 和 Babel 的“您可能需要合适的加载器”错误遇到此错误意味着 Webpack 需要合适的加载器来解释文件。在这个特定实例中,Babel 将用于 ES6 编译。要解决此问题,请按照以下步骤操作:安装 ES2015 预设:npm install babel-preset-es2...
    编程 发布于2024-11-08
  • 执行上下文和调用堆栈
    执行上下文和调用堆栈
    为顶级代码创建全局执行上下文,即不在任何 fn 内的代码。因此,首先执行 fn 之外的代码。 fn-decln/exprsn 的 fn 主体内的代码仅在调用时执行。 执行上下文(EC) JS执行的环境。 存储一些要执行的代码的所有必要信息,例如局部变量、传递给 fn 的 args。 ...
    编程 发布于2024-11-08
  • 是否有必要将字符串传递给 setTimeout?
    是否有必要将字符串传递给 setTimeout?
    向 setTimeout 传递字符串:一个必要性问题由于性能问题、潜在的安全风险及其不推荐使用,许多开发人员不赞成向 setTimeout 传递字符串的做法地位。然而,在极少数情况下,这种语法可能是有益的。弃用争论setTimeout 和 setInterval 的传统语法涉及传递一个表示要执行的代...
    编程 发布于2024-11-08
  • Hours是一个环境变量,我将使用ENV。冷静冷静,我先告诉你一件事
    Hours是一个环境变量,我将使用ENV。冷静冷静,我先告诉你一件事
    我们总是很匆忙,想要尽快开发,我们经常会采用旧习惯并构建旧软件,我们可以改进的一个项目是这个叫做环境的小东西,让我们进一步了解一下。 首先,我想在这里展示 Laravel 配置概念的重点,我不会担心其余的模式,例如资源或其他类似的模式。 1 - 让我们寻求知识! 不久前,我听说我无法在我的疯狂代...
    编程 发布于2024-11-08
  • 要记住的 useState:将变量存储在 React 的内存中!
    要记住的 useState:将变量存储在 React 的内存中!
    在 React 的世界中,管理组件的状态对于构建动态和交互式应用程序至关重要。最强大的工具之一是 useState 钩子。 在 React 世界中,状态管理是创建交互式和动态应用程序的基石之一。 useState 是 React 中最常用的钩子之一,是管理组件状态的有效方法。在本文中,我们将研究 u...
    编程 发布于2024-11-08
  • 实现订单处理系统:部分分布式跟踪和日志记录
    实现订单处理系统:部分分布式跟踪和日志记录
    1. Introduction and Goals Welcome to the fifth installment of our series on implementing a sophisticated order processing system! In our prev...
    编程 发布于2024-11-08
  • 如何在不同浏览器中准确测量调整大小后的图片的原始尺寸?
    如何在不同浏览器中准确测量调整大小后的图片的原始尺寸?
    跨浏览器揭示客户端调整大小图像的原始尺寸确定已在客户端调整大小的图像的真实尺寸side 是许多 Web 开发场景的关键任务。无论您是调整图像以实现响应式布局,还是向用户显示原始尺寸,找到一个跨浏览器一致工作的可靠解决方案至关重要。选项 1:释放 OffsetWidth 和 OffsetHeight一...
    编程 发布于2024-11-08
  • Python中什么时候会遇到“FileNotFoundError: No Such File or Directory”?
    Python中什么时候会遇到“FileNotFoundError: No Such File or Directory”?
    FileNotFoundError 疑难解答:没有这样的文件或目录尝试打开文件时,您可能会遇到“FileNotFoundError:[Errno 2]没有这样的文件或目录”错误,表明Python找不到指定的文件。由于当前工作目录与文件的实际位置之间存在差异,通常会出现此问题。了解相对路径默认情况下,...
    编程 发布于2024-11-08
  • 如何通过限制用户对其自己创建的内容的访问来保护 MySQL 数据库?
    如何通过限制用户对其自己创建的内容的访问来保护 MySQL 数据库?
    通过限制对用户创建的数据库的访问来保护 MySQL 数据库在多用户 MySQL 设置中,确保数据安全至关重要。一个常见的挑战是允许用户创建数据库,同时限制他们只能访问自己创建的数据库。为了解决此问题,MySQL 提供了一种使用通配符数据库名称的细致方法。解决方案不是授予特定数据库的权限,而是授予具有...
    编程 发布于2024-11-08
  • Alura 的免费 HTML 和 CSS 挑战:构建 Netflix 副本
    Alura 的免费 HTML 和 CSS 挑战:构建 Netflix 副本
    7 天 HTML 和 CSS 代码是 Alura 为您提供的免费在线练习前端精髓的机会。 在 7 天的时间里,您将面临复制 Netflix 电影和剧集页面布局的挑战,应用从“div”、“section”等基本概念、CSS 中的图像内联和测量到更高级技术的所有内容例如 Flexbox 和 Grid。 ...
    编程 发布于2024-11-08
  • 让您在 4 年内成为更快的 AI 工程师的工具
    让您在 4 年内成为更快的 AI 工程师的工具
    在当今科技和创新驱动的世界,对人工智能工程师的需求很高。根据 BlueTree 的统计数据,到 2030 年,人工智能行业预计将增长近 20 倍。这种飙升的需求伴随着对更多人工智能工程师的需求。 在本文中,我们将探讨可以让您在执行 AI 工程任务时脱颖而出的 6 种顶级工具,以及它们如何帮助您更快地...
    编程 发布于2024-11-08
  • 如何从 Golang 程序设置 ulimit -n 而不影响全局限制?
    如何从 Golang 程序设置 ulimit -n 而不影响全局限制?
    从 Golang 程序中设置 ulimit -nQ: 如何从 Golang 程序中设置 ulimit -n 以将其限制在A:要从 Golang 程序中设置 ulimit -n,可以使用以下步骤:package main import ( "fmt" "s...
    编程 发布于2024-11-08
  • 当存在多个网卡时,如何限制 Go 的 HTTP 客户端的 IP 地址?
    当存在多个网卡时,如何限制 Go 的 HTTP 客户端的 IP 地址?
    如何限制 HTTP 客户端的 IP 地址Go 的 http.Client 可以实现高效的 HTTP 请求,但是如果你的系统包含多个 NIC?自定义 IP 绑定要将 http.Client 绑定到特定 IP,请使用 net.Transport 实例修改其 Transport 字段。这允许您指定net....
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3