JFrog Connector

JFrog Connector 是一个平台无关的连接器,可用于连接到 JFrog Artifactory 实例。

您可以使用 JFrog Connector 在 CICD 流水线中安全访问托管在 JFrog Artifactory 中的私有 Maven、NPM 和 PyPI 仓库,或者在 Kubernetes 工作负载中使用它执行无凭证的包操作。

此外,您还可以集中管理跨命名空间的 JFrog Artifactory 访问配置,避免在每个命名空间中重复凭证。

Overview

本文档涵盖:

  • 集成要求:目标 JFrog Artifactory 实例的先决条件
  • 创建 JFrog Connector
  • 高级功能:代理功能及 Maven、NPM 和 PyPI 的配置文件

Integration Requirements

JFrog Artifactory 先决条件

  • Kubernetes 集群可访问的 JFrog Artifactory 实例
  • 具有适当仓库权限的用户凭证

Creating a simple JFrog connector

以下是创建基础 JFrog Connector 的方法:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: jfrog-connector
spec:
  connectorClassName: jfrog
  address: https://jfrog.example.com

Fields Reference

spec.connectorClassName

jfrog(常量),指定用于 JFrog Artifactory 集成的 ConnectorClass 名称。

spec.address

JFrog Artifactory 基础 URL,例如:https://jfrog.example.com

spec.auth(可选)

指定 JFrog Artifactory 实例的认证方式。

  • spec.auth.name:对于 JFrog Connector,应为 basicAuth

  • spec.auth.secretRef:指定包含 JFrog Artifactory 实例认证信息的 Secret。该 Secret 应创建在与 Connector 相同的命名空间中。

可选元数据字段

  • cpaas.io/description:JFrog Connector 的描述信息,例如:

    apiVersion: connectors.alauda.io/v1alpha1
    kind: Connector
    metadata:
      name: jfrog-connector
      annotations:
        cpaas.io/description: "Connect to team JFrog Artifactory instance"

Capabilities of JFrog Connector

Authentication

JFrog Connector 支持以下认证类型:

  • basicAuth:基于用户名和密码的认证,对应的 Secret 类型为 kubernetes.io/basic-auth

例如:

apiVersion: v1
stringData:
  username: your-jfrog-username
  password: your-jfrog-password
kind: Secret
metadata:
  name: jfrog-secret
type: kubernetes.io/basic-auth

有关完整的状态信息,请参见 Connector Status Documentation

Credential Permissions Required

所需凭证权限取决于您打算如何使用它。

例如:

  • 下载操作:如果仅需下载依赖,凭证只需对目标仓库具有读取权限。
  • 发布操作:如果需要发布制品,凭证必须对目标仓库同时具有读写权限。

出于安全最佳实践,建议创建权限最小化的凭证。当需要额外权限时,创建具有更高权限的独立 Connector,并通过命名空间隔离控制用户对各 Connector 的访问。

JFrog Connector Proxy and Configuration Files

为了让客户端能够无凭证访问 JFrog Artifactory,JFrog Connector 提供了一个代理服务器,用于自动注入认证信息。

创建 Connector 后,系统会自动为目标 JFrog Artifactory 实例配置代理服务。

代理端点记录在 status.proxy.httpAddress 中:

apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: jfrog-connector
spec:
  # connector spec fields
status:
  conditions:
    # status conditions
  proxy:
    httpAddress:
      url: http://c-jfrog-connector.default.svc.cluster.local

JFrog ConnectorClass 提供以下可通过 Connectors CSI Driver 挂载的配置文件:

配置名称生成文件使用场景
settingssettings.xml通过代理进行 Maven 操作
npmrc.npmrcNPM 包操作
yarnrc.yarnrc.ymlYarn 包操作
pipconfpip.confPyPI 包下载
pypirc.pypircPyPI 包发布

Maven Configuration: settings.xml

JFrog Connector 提供了用于 Maven 的 settings.xml 配置文件,通过 Connector 代理将制品下载路由到 JFrog Artifactory Maven 仓库。

配置参数

  • mirrorRepository(可选):用于作为 Maven 镜像的 JFrog Artifactory 仓库 key。若省略,生成的 settings.xml 中不会包含 <mirrors> 部分。

示例 CSI 卷定义:

volumes:
- name: maven-settings
  csi:
    readOnly: true
    driver: connectors-csi
    volumeAttributes:
      connector.name: "jfrog-connector"
      configuration.names: "settings"
      configuration.params: '{"settings":{"mirrorRepository":"libs-release"}}'

示例生成的 settings.xml

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" ...>
  <proxies>
    <proxy>
      <id>connectors-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>connectors-proxy-service.connectors-system.svc.cluster.local</host>
      <port>80</port>
      <username>NAMESPACE/CONNECTOR_NAME</username>
      <password>TOKEN</password>
      <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
  </proxies>
  <mirrors>
    <mirror>
      <id>jfrog-connector-mirror</id>
      <url>https://jfrog.example.com/artifactory/libs-release</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>
</settings>

NPM Configuration: .npmrc and .yarnrc.yml

JFrog Connector 提供了用于 NPM/Yarn 的 .npmrc.yarnrc.yml 配置文件,通过 Connector 代理将请求路由到 JFrog Artifactory NPM 仓库。

配置参数

  • repository:JFrog Artifactory NPM 仓库 key,用于构建 NPM/Yarn registry URL
  • strictSSL(可选):若设置,Connector 会将该值写入 .npmrcstrict-ssl)和 .yarnrc.ymlenableStrictSsl

示例 CSI 卷定义:

volumes:
- name: npmrc
  csi:
    readOnly: true
    driver: connectors-csi
    volumeAttributes:
      connector.name: "jfrog-connector"
      configuration.names: "npmrc"
      configuration.params: '{"npmrc":{"repository":"npm-local"}}'
- name: yarnrc
  csi:
    readOnly: true
    driver: connectors-csi
    volumeAttributes:
      connector.name: "jfrog-connector"
      configuration.names: "yarnrc"
      configuration.params: '{"yarnrc":{"repository":"npm-local"}}'

PyPI Configuration: pip.conf and .pypirc

JFrog Connector 提供了用于 PyPI 工具的 pip.conf.pypirc 配置文件,通过 Connector 代理将请求路由到 JFrog Artifactory PyPI 仓库。

配置参数

  • repository:JFrog Artifactory PyPI 仓库 key(用于 pip.conf
  • deployRepository:JFrog Artifactory PyPI 发布仓库 key(用于 .pypirc

示例 CSI 卷定义:

volumes:
- name: pipconf
  csi:
    readOnly: true
    driver: connectors-csi
    volumeAttributes:
      connector.name: "jfrog-connector"
      configuration.names: "pipconf"
      configuration.params: '{"pipconf":{"repository":"pypi-local"}}'
- name: pypirc
  csi:
    readOnly: true
    driver: connectors-csi
    volumeAttributes:
      connector.name: "jfrog-connector"
      configuration.names: "pypirc"
      configuration.params: '{"pypirc":{"deployRepository":"pypi-local"}}'

Using Connectors CSI Driver to Mount Configuration Files

CSI 卷参数说明:

  • csi.readOnly:固定值 true
  • csi.driver:Connector CSI Driver,固定为 connectors-csi
  • csi.volumeAttributes:CSI 卷属性
    • connector.name:JFrog Connector 名称
    • connector.namespace:JFrog Connector 所在命名空间;若未指定,则使用 Pod 所在命名空间
    • configuration.names:配置名称。支持值:settings(Maven)、npmrcyarnrcpipconfpypirc
    • configuration.params:每个命名配置的运行时参数的 JSON 字符串

configuration.params for JFrog

有关 configuration.params 的通用格式、校验流程及合并行为,请参见 Connectors CSI Driver 文档中的 configuration.params

在当前 JFrog ConnectorClass 清单中,configurations[].params 的 schema/默认值未显式声明。配置模板从 configuration.params 中读取以下键:

配置名称参数名模板行为
settingsmirrorRepository若设置,则在 settings.xml 中生成 Maven 镜像 URL <address>/artifactory/{mirrorRepository}
npmrcrepository.npmrc 中生成 NPM registry/auth URL <address>/artifactory/api/npm/{repository}
npmrcstrictSSL若设置,则在 .npmrc 中写入 strict-ssl
yarnrcrepository.yarnrc.yml 中生成 Yarn registry URL <address>/artifactory/api/npm/{repository}
yarnrcstrictSSL若设置,则在 .yarnrc.yml 中写入 enableStrictSsl
pipconfrepositorypip.conf 中生成 PyPI 索引 URL <address>/artifactory/api/pypi/{repository}/simple/
pypircdeployRepository.pypirc 中生成 PyPI 发布 URL http://<proxy-host>/artifactory/api/pypi/{deployRepository}/

Further Reading

References