Maven Connector
Maven Connector 是一个平台无关的连接器,您可以使用它连接到任何 Maven 注册表。
您可以使用 Maven Connector 在 CICD 流水线中安全地执行 maven 操作,或者在 kubernetes 工作负载中使用它以无凭证方式执行 maven 操作。
此外,您还可以集中管理跨命名空间的 maven 访问配置,避免在每个命名空间中重复配置 maven 凭证。
目录
OverviewIntegration RequirementsCreating a simple Maven connectorFields ReferenceCapabilities of Maven ConnectorAuthentication使用基本认证凭证所需权限代理和 settings.xml 配置代理地址settings.xml 配置文件ca.cert 文件使用 Connectors CSI Driver 挂载 settings.xml 和 ca.cert 文件Further ReadingReferencesOverview
本文档涵盖:
- 集成要求:目标 Maven 注册表的先决条件
- 创建 Maven Connector
- 高级功能:关于 Maven Connector 的代理功能和配置功能
Integration Requirements
Maven 注册表先决条件
- Maven 注册表必须支持 maven 操作,如
mvn deploy、mvn install、mvn package等。它必须是 maven 快照仓库、maven 发布仓库或 maven 代理仓库之一,例如 maven central、由 nexus、artifactory 等托管的 maven 仓库。
客户端使用 Maven Connector 也有一些先决条件:
客户端先决条件
-
客户端应信任连接器代理服务器的证书,因此在执行 mvn 操作前,您应将
ca.cert文件导入客户端的信任库。通常,您可以使用keytool -importcert命令将ca.cert文件导入客户端的信任库。例如: -
mvn 客户端应使用 transport=wagon 来执行 mvn 操作。可以通过在 mvn 命令中添加
-Dmaven.resolver.transport=wagon参数,或将环境变量MAVEN_OPTS设置为-Dmaven.resolver.transport=wagon来实现。
Creating a simple Maven connector
以下是创建一个基础 Maven Connector 的示例:
Fields Reference
spec.connectorClassName:
maven(固定值),指定 Maven 集成的 ConnectorClass 名称。
spec.address:
目标 Maven 注册表地址,例如:https://nexus.example.com/repository/maven-snapshots 或 https://repo.maven.apache.org/maven2。必须是 maven 快照仓库、maven 发布仓库或 maven 代理仓库之一。
spec.auth:
指定 maven 注册表的认证方式
-
spec.auth.name:maven connector 应为basicAuth。 -
spec.auth.secretRef:指定包含 maven 注册表认证信息的 Secret,Secret 应创建在与 Connector 相同的命名空间中。如果您的 maven 注册表不需要认证,可以省略此字段。
可选元数据字段:
-
cpaas.io/description:maven connector 的描述信息,例如:
Capabilities of Maven Connector
Authentication
Maven Connector 支持以下认证类型:
basicAuth:基于用户名和密码的认证,对应的 Secret 类型为:kubernetes.io/basic-auth
使用基本认证
示例:
如果 Secret 不正确,maven connector 的 status.conditions 字段会显示错误信息。
有关完整状态信息,请参见Connector 状态文档。
如果 Maven 注册表不需要认证,可以省略 secretRef 字段:
凭证所需权限
配置凭证所需的权限取决于您打算如何在 Pods/Pipelines 中使用它。
例如:
- 打包操作:如果您只需通过
mvn package或mvn install下载依赖,凭证只需对目标 Maven 仓库具有读取权限。 - 打包和发布操作:如果需要通过
mvn deploy发布构件,凭证必须对目标仓库具有读写权限。
出于安全最佳实践,建议创建权限最小的凭证。当需要额外权限时,创建具有更高权限的独立 Connector,并通过命名空间隔离控制用户访问。
代理和 settings.xml 配置
为了让客户端能够无凭证访问 maven 注册表,Maven Connector 提供了一个代理服务器,用于自动注入认证信息。
客户端可以通过该代理服务器访问 maven 注册表,无需在客户端配置凭证。
为简化使用,Maven connectorclass 提供了可以通过 CSI 挂载到 Pod 中的 settings.xml 文件。在 Pod 中执行 maven 操作时,代理服务会自动注入认证信息。
代理地址
创建 Connector 后,系统会自动为目标 maven 注册表配置一个代理服务。
代理端点记录在 status.proxy.httpAddress 字段中:
例如:
settings.xml 配置文件
Maven Connector 提供以下配置:
settings.xml:
- 提供一个
settings.xml配置文件,结合 connector-csi-driver,该配置文件将被挂载到 Pod 中,使得通过代理访问 maven 注册表时,无需在客户端配置凭证。
Pod 中生成的配置文件示例:
有关代理机制的详细说明,请参见快速入门指南中的工作原理。
ca.cert 文件
Maven Connector 提供了一个 ca.cert 文件,可以通过 Connector CSI Driver 挂载到 Pod 中。该文件用于信任连接器代理服务器,因此在执行 mvn 操作前,应将 ca.cert 文件导入客户端的信任库。
使用 Connectors CSI Driver 挂载 settings.xml 和 ca.cert 文件
Maven Connector 提供了 settings.xml 和 ca.cert 文件,可以通过 Connector CSI Driver 挂载到 Pod 中。
示例:
参数说明:
csi.readOnly:固定值truecsi.driver:Connector CSI Driver,固定为connectors-csicsi.volumeAttributes:CSI 卷属性connector.name:Maven Connector 名称connector.namespace:Maven Connector 所在命名空间;如果未指定,则使用 Pod 所在命名空间configuration.names:由 Maven Connector 提供的配置名称,如上例支持settings
关于如何通过 connectors-csi-driver 在 Pod 中使用 settings 文件的详细信息,请参见在 kubernetes 任务中使用 Maven Connectors
Further Reading
- 作为分发管理仓库使用 Maven Connectors
- 作为 Maven 注册表镜像使用 Maven Connectors
- 在 Tekton Pipelines 中使用 Maven Connectors