NPM Connector
NPM connector 是一种与平台无关的连接器,可用于连接任意 NPM registry。
你可以使用 NPM Connector 在 CICD pipeline 中安全地执行 NPM 操作,也可以在 kubernetes 工作负载中使用它,在无需凭证的情况下执行 NPM 操作。
此外,你还可以在多个 namespace 之间集中管理 NPM 访问配置,避免在每个 namespace 中重复配置 NPM 凭证。
目录
概述集成要求创建一个简单的 NPM 连接器字段参考NPM Connector 的功能认证所需的凭证权限使用 npmrc 和 yarnrc.yml 文件的 NPM Connector 代理与配置代理地址.npmrc 配置文件.yarnrc.yml 配置文件ca.cert 文件使用 Connectors CSI Driver 挂载 .npmrc 和 .yarnrc.yml 文件延伸阅读参考资料概述
本文档涵盖以下内容:
- 集成要求:目标 NPM registry 的前置条件
- 创建 NPM 连接器
- 高级功能:NPM connector 的代理能力和配置能力
集成要求
NPM Registries 前置条件
- NPM registry 必须支持 NPM Registry API
创建一个简单的 NPM 连接器
以下是创建基础 NPM Connector 的方法:
字段参考
spec.connectorClassName:
npm(常量),用于指定 NPM 集成的 ConnectorClass 名称。
spec.address:
目标 NPM registry 地址,例如:https://registry.npmjs.org。
当使用 Nexus 作为 npm registry 时,需要配置 repository 地址,例如:https://nexus.example.com/repository/npm-public。
spec.auth(可选):
指定 NPM registry 的认证方式
-
spec.auth.name:对于 NPM connector,应为basicAuth。 -
spec.auth.secretRef:指定包含 NPM registry 认证信息的 secret,该 secret 应创建在与 connector 相同的 namespace 中。如果你的 NPM registry 不需要认证,可以省略此字段。
可选的 Metadata 字段:
-
cpaas.io/description:NPM connector 的描述信息,例如:
spec.params(可选):
NMP Connector 支持的参数,用于控制 connector 配置行为。
spec.params[].name:参数名称,必须与对应ConnectorClass中定义的参数名称匹配。spec.params[].value:参数值。该值的类型必须与ConnectorClass中定义的参数类型匹配。
支持的参数:
-
registryType:当多个 NPM connector 在单个 CSI volume 中一起使用时,指定此 connector 的角色。该参数控制用于下载包和用于发布包的 registry 地址。允许的值:mirror— 使用此 connector 的 registry 下载依赖项(例如npm install)publish— 使用此 connector 的 registry 发布包(例如npm publish)all— 使用此 connector 的 registry 同时进行下载和发布- (空) — 旧版行为;当没有 connector 显式设置
registryType时,当前 connector 的地址同时用于下载和发布
当至少有一个 connector 显式设置了
registryType时,下载 registry 的解析优先级为:mirror>all>publish> current connector。发布 registry 的解析优先级为:publish>all> (空) >mirror> current connector。该参数仅在使用 multiple connectors in one CSI volume 时有意义。对于单 connector 使用场景,可以省略。
-
strict-ssl:是否为 NPM registry 写入带有strict-ssl参数的 .npmrc/.yarnrc.yml 文件。默认值为true。支持true和false。
例如:
NPM Connector 的功能
认证
NPM connector 支持以下认证类型:
basicAuth:基于用户名和密码的认证,对应的 secret 类型:kubernetes.io/basic-auth
例如:
有关完整的状态信息,请参阅 Connector Status Documentation。
如果 NPM registry 不需要认证,可以省略 secretRef 字段:
所需的凭证权限
所需的凭证权限取决于你打算在 Pod/Pipeline 中如何使用它。
例如:
- 包操作:如果你只需要使用
npm install下载依赖项,那么凭证只需要对目标 NPM repository 具有读取权限。 - 包和部署操作:如果你需要使用
npm publish发布制品,那么凭证必须对目标 repository 同时具有读取和写入权限。
出于安全最佳实践,我们建议使用仅满足最低需求权限的凭证。当需要额外权限时,请创建具有更高权限 secret 的单独 Connectors,并使用 namespace 隔离来控制哪些用户可以访问每个 Connector。
使用 npmrc 和 yarnrc.yml 文件的 NPM Connector 代理与配置
为了让客户端能够在无需凭证的情况下访问 NPM registry,NPM connector 提供了一个代理服务器,用于自动注入认证信息。
客户端可以使用此代理服务器访问 NPM registry,而无需在客户端侧配置凭证。
为了简化使用,NPM connectorclass 提供了可通过 CSI 挂载到 Pod 中的 .npmrc 和 .yarnrc.yml 文件。在 Pod 中执行 NPM 操作时,代理服务可以自动注入认证信息。
.yarnrc.yml 文件仅支持 Yarn 2.x 版本。
代理地址
在创建 Connector 后,系统会自动为目标 NPM registry 配置一个代理服务。
代理端点记录在 status.proxy.httpAddress 中:
例如:
.npmrc 配置文件
NPM connector 提供以下配置:
.npmrc:
- 提供一个
.npmrc配置文件。结合 connector-csi-driver,该配置文件会挂载到 Pod 中,使其可以通过代理访问 NPM registry,而无需在客户端侧配置凭证。
Pod 中生成的配置文件示例如下:
.yarnrc.yml 配置文件
-
提供一个
.yarnrc.yml配置文件。结合 connector-csi-driver,该配置文件会挂载到 Pod 中,使其可以通过代理访问 NPM registry,而无需在客户端侧配置凭证。
有关代理机制的详细说明,请参阅 Quick Start 指南中的 How It Works。
当使用带有 HTTPS registry 的 yarn 时,需要通过环境变量为 yarn 配置 Connector Proxy 证书信任,否则会发生证书错误。
yarn 的证书配置如下:
ca.cert 文件
NPM connector 还提供一个包含 Connector Proxy 的 CA 证书的 ca.cert 文件。该文件可通过 Connector CSI Driver 挂载到 Pod 中,以便在通过 HTTPS 访问代理时建立 TLS 信任。
使用 Connectors CSI Driver 挂载 .npmrc 和 .yarnrc.yml 文件
NPM connector 提供了可通过 Connector CSI Driver 挂载到 Pod 中的 .npmrc、.yarnrc.yml 和 ca.cert 文件。
例如:
参数说明:
csi.readOnly:固定值truecsi.driver:Connector CSI Driver,固定为connectors-csi。csi.volumeAttributes:CSI Volume 属性connector.name:NPM Connector 的名称connector.namespace:NPM Connector 的 namespace;如果未指定,则使用 Pod 的 namespaceconfiguration.names:配置名称,由 NPM Connector 提供。与上文一致,支持npmrc和yarnrc。
有关如何通过 connectors-csi-driver 在 Pod 中使用 .npmrc 和 .yarnrc.yml 文件的详细信息,请参阅 Using NPM Connectors in kubernetes jobs