所有产品hth华体会最新官方网站-定制
以下高级定制与所有JFrog产品相关。hth华体会最新官方网站
建立TLS协议和添加证书
为Artifactory建立TLS并添加证书
在HTTPS中,通信协议使用传输层安全(TLS)进行加密。缺省情况下,JFrog平台节点间的TLS协议是禁用的。启用TLS时,JFrog Access充当证书颁发机构(CA),对所有不同的JFrog平台节点使用的TLS证书进行签名。
若要在JFrog平台节点间建立TLS协议,请通过修改tls
的条目(在安全部分下)access.config.yaml
文件。有关其他信息,请参见TLS证书管理.
若要在图表中启用TLS,请设置
tls
到真实之下访问
在values.yaml
.默认设置为false。access: accessConfig: security: tls: true
若要添加自定义TLS证书,请从证书文件中创建TLS秘密。
Kubectl create secret TLS < TLS -secret-name>——cert=ca。crt - = ca.private.key的关键
对于重置接入证书,可以设置
resetAccessCAKeys
中的访问部分下的值为truevalues.yaml
并执行头盔升级。一旦头盔升级完成,设置
resetAccessCAKeys
为false用于后续升级(以避免在每次Helm升级时重置访问证书)。access: accessConfig: security: tls: true customCertificatesSecretName:
resetAccessCAKeys: true
建立TLS并为x射线、任务控制和分发添加证书
对象在节点之间创建信任ca.crt
从Artifactory服务器下JFROG_HOME美元/ artifactory / var / etc /访问键
到您想在下面设置信任的节点美元JFROG_HOME / var / etc /安全/键/信任
.有关详细信息,请参见TLS证书管理.
将此证书添加到x射线中:
创建一个
configmaps.yaml
包含以下内容的文件。x光common: configMaps: | ca.crt: | -----BEGIN CERTIFICATE----- <证书内容> -----END CERTIFICATE----- customVolumeMounts: | - name: xray-configmaps mountPath: /tmp/ca。mkdir -p {{. values .xray.persistence. crt子路径:ca.crt服务器:preStartCommand: "mkdir -p {{. values .xray.persistence. exe "mountPath}}/etc/security/keys/trusted && cp -fv /tmp/ca. sh /tmp/ca. shcrt {{. values .xray.persistence。mountPath}}/etc/security/keys/trusted/ca.crt" router: tlsEnabled: true
任务控制common: configMaps: | ca.crt: | -----BEGIN CERTIFICATE----- <证书内容> -----END CERTIFICATE----- customVolumeMounts: | - name: mission-control-configmaps mountPath: /tmp/ca。mkdir -p {{. values .missionControl.persistence. crt subPath: ca.crt missionControl: preStartCommand: "mkdir -p {{. values .missionControl.persistence. crt "mountPath}}/etc/security/keys/trusted && cp -fv /tmp/ca. sh /tmp/ca. shcrt {{. values . missioncontrol .persistence。mountPath}} / etc /安全/键/相信/ ca。router: tlsEnabled: true
分布common: configMaps: | ca.crt: | -----BEGIN CERTIFICATE----- <证书内容> -----END CERTIFICATE----- customVolumeMounts: | - name: distribution-configmaps mountPath: /tmp/ca。preStartCommand: "mkdir -p {{. values .distribution.persistence. crt subPath: ca.crt distribution: preStartCommand: "mkdir -p {{. values .distribution.persistence. conf "mountPath}}/etc/security/keys/trusted && cp -fv /tmp/ca. sh /tmp/ca. shcrt {{. values .distribution.persistence。mountPath}}/etc/security/keys/trusted/ca.crt" router: tlsEnabled: true
掌舵安装/升级。
x光头盔升级-安装xray -f configmapsYaml——命名空间xray jfrog/xray
任务控制安装任务控制-f configmaps命名空间mission-control jfrog/mission-control
分布—install distribution -f configmapsYaml——命名空间分发jfrog/分发
使用上面指定的文件创建一个configMap。
这将反过来:创建一个指向configMap的卷
xray-configmaps
.将这个configMap挂载到
/ tmp
使用一个customVolumeMounts。
使用
preStartCommand
,复制ca.crt
文件到x射线可信密钥文件夹/etc/security/keys/trusted/ca.crt.
router.tlsEnabled
设置为true以在活动探测和就绪探测中添加HTTPS方案。
为管道建立TLS和添加证书
类型可以在节点之间创建信任关系ca.crt
下的Artifactory服务器的文件JFROG_HOME美元/ artifactory / var / etc /访问键
要在下面设置信任的节点的JFROG_HOME美元/管道/ var / etc /安全/键/信任
.有关更多信息,请参见TLS证书管理.
可在受信任目录中显示多个证书。例如,您可以在使用自定义证书设置的负载均衡器后面配置pipes API URL。您需要将这些证书添加到可信文件夹中,因为构建节点将通过负载均衡器端点与pipes API通信。
添加NODE_EXTRA_CA_CERTS
使用自定义证书时的环境变量。管道查看受信任文件夹中所有可用的证书,并将它们连接到一个名为pipeline_custom_certs.crt,
然后传递为NODE_EXTRA_CA_CERTS
环境变量。
可以添加TLS证书通过Kubernetes的秘密。你需要在这个图表之外创建秘密,并使用标签提供,”Values.pipelines.customCertificates.certificateSecretName
".
下面的示例展示了如何创建秘密。
——from-file=ca.crt=ca.crt
您可以通过更新值将秘密传递给Helm安装。yaml文件。
customCertificates: enabled: true certificateSecretName: ca-cert
添加信任证书圈
创建一个包含证书(源计算机的根证书)的秘密。
下面的示例显示如何创建包含根证书的秘密。
Kubectl创建秘密通用的edge-root-crt——from-file=./edge-root.crt
更新值。yaml文件传递秘密到Helm安装。
artifactory: circleOfTrustCertificatesSecret: edge-root-crt
运行以下命令将秘密传递到Helm安装。
安装artifactory jfrog/artifactory -f values.yaml
添加自定义Init容器
Init容器是在主容器与容器化应用程序一起运行之前运行的容器。在某些情况下,例如,在启动主容器之前,您将需要使用专门的、不受支持的init进程来检查文件系统中的某些内容或测试某些内容。如果您需要添加一个自定义的init容器,请使用该节进行定义对象中的自定义init容器values.yaml
文件(bY默认这部分被注释掉)。
customInitContainers: | ##初始化容器模板到这里
common: ##添加在预定义的init容器之前执行的自定义init容器customInitContainersBegin: | ## init容器模板到这里## ##添加在预定义的init容器之后执行的自定义init容器customInitContainers: | ## init容器模板到这里##
common: ##添加自定义初始化容器customInitContainers: | ##初始化容器模板到这里
##添加自定义初始化容器customInitContainers: |
添加自定义Sidecars容器
sidecar是pod中的实用程序容器,与主应用程序容器松散耦合。在某些情况下,您可能需要使用额外的sidecar容器,例如用于监视代理或日志收集。类中定义自定义边车容器的部分values.yaml
文件(默认情况下,此部分被注释掉)。
artifactory: ##添加自定义侧车容器customSidecarContainers: | ##侧车容器模板在这里
common: ##添加自定义侧车容器customSidecarContainers: | ##侧车容器模板到这里
common: ##添加自定义侧车容器customSidecarContainers: | ##侧车容器模板到这里
common: ##添加自定义侧车容器customSidecarContainers: | ##侧车容器模板到这里
添加自定义卷
Kubernetes卷本质上是一个目录,可以被pod中运行的所有容器访问。如果需要在自定义init或sidecar容器中使用自定义卷,类中定义自定义初始化容器或自定义边车容器的部分values.yaml
文件(默认情况下,这些部分被注释掉。
artifactory: ##添加自定义卷customVolumes: |
server: ##添加自定义卷customVolumes: | ##自定义卷来这里##
任务控制和分配自定义卷
要为您的init容器添加自定义自定义文件,或对任务控制/分发容器将看到的文件系统进行更改,请使用以下部分进行定义中的自定义卷values.yaml
.默认情况下,这些值为空。
common: ##添加自定义卷customVolumes: | # - name: custom-script # configMap: # name: custom-script ##添加自定义卷customVolumeMounts: | # - name: custom-script # mountPath: "/scripts/script.sh" # subPath: script.sh
common: ##添加自定义卷customVolumes: | # - name: custom-script # configMap: # name: custom-script distribution: ##添加自定义卷umounts customVolumeMounts: | # - name: custom-script #挂载路径:"/scripts/script.sh" #子路径:script.sh分销商:##添加自定义卷umounts customVolumeMounts: | # - name: custom-script #挂载路径:"/scripts/script.sh" #子路径:script.sh
覆盖默认的系统YAML文件
在一些高级用例中,用户希望提供自己的用例system.yaml
配置JFrog服务。使用此选项将覆盖现有的system.yaml
在values.yaml
文件。有两种方法可以覆盖的system.yaml
:通过使用自定义初始化容器和使用外部系统。yaml与一个存在的秘密。
然后,优先顺序将如下所示.
自定义初始化容器
外部system.yaml
默认的系统。在values.yaml
对于管道图表,从图表2.2.0及以上版本开始,使用.Values.existingSecret
已更改为.Values.systemYaml.existingSecret
而且.Values.systemYaml.dataKey
.
使用一个自定义初始化容器
自定义Init容器使用外部源(如金库、外部存储库等)来覆盖system.yaml
文件。
下面的例子是x射线图。
customInitContainers: | - name: "custom-systemyaml-setup" image: "{{. values . setup"initContainerImage}}" imagePullPolicy: "{{. values . initContainerImage}}"imagePullPolicy}}"命令:- 'sh' - '-c' - 'wget - o {{. values .xray.persistence. xml "mountPath}} / etc /系统。yaml https:///systemyaml' volumeMounts: - mountPath: "{{. values .xray.persistence. "mountPath}}名称:data-volume
使用外部系统YAML文件
创建外部
system.yaml
为其中一个服务提供文件,例如Xray,并将其文件名设置为-xray-cus-sy.yaml
.configVersion: 1 shared: logging: consoleLog: enabled: true jfrogUrl: "http://artifactory-artifactory. "数据库:type: "postgresql"驱动:"org.postgresql. "驱动用户名:“xray”url:“postgres://xray-postgresql:5432/xraydb?”sslmode=禁用" server: mailServer: "" indexAllBuilds: "true"
创建一个Kubernetes秘密。
Kubectl创建秘密通用sy——from-file ./xray-cus-sy.yaml
现在,在相关部分使用这个秘密。
systemYamlOverride: existingSecret: sy dataKey: x射线- cusy -sy.yaml
自动生成密码(内部PostgreSQL)
内部PostgreSQL需要在安装或升级期间有一个变量可用。如果用户没有设置,则会设置一个随机的10个字符的字母数字字符串;因此,建议用户在安装和升级期间显式地设置此选项。
——设置postgresql。postgresqlPassword = <价值> \
这些值应该在升级之间保持不变。如果这是自动生成的舵安装
在美国,未来升级时必须传递相同的密码。
要读取当前密码,请使用以下命令(有关读取秘密值的详细信息,请参见Kubernetes:解码一个秘密).
POSTGRES_PASSWORD=$(kubectl get secret -n-postgresql -o jsonpath="{.data. data. "" | base64——decode)
以下参数可在升级时设置。
——设置postgresql。postgresqlPassword = $ {POSTGRES_PASSWORD} \
使用自定义秘密
Secrets是Kubernetes对象,用于存储加密的用户名和密码等敏感数据。类中定义自定义秘密的部分,用于在自定义初始化或sidecar容器中添加自定义秘密values.yaml
文件(bY默认这部分被注释掉)。
artifactory: #添加自定义秘密-每个文件的秘密customSecrets: -名称:自定义秘密密钥:自定义秘密。Yaml数据:>机密数据
common: #添加自定义秘密-每个文件的秘密customSecrets: -名称:自定义秘密密钥:自定义秘密。Yaml数据:>机密数据
common: #添加自定义秘密-每个文件的秘密customSecrets: -名称:自定义秘密密钥:自定义秘密。Yaml数据:>机密数据
#添加自定义秘密-每个文件的秘密customSecrets: -名称:自定义秘密密钥:自定义秘密。Yaml数据:>机密数据
#添加自定义秘密-每个文件的秘密customSecrets: -名称:自定义秘密密钥:自定义秘密。Yaml数据:>机密数据
要使用自定义秘密,您需要定义一个自定义卷。
下面的示例展示了如何在Artifactory中定义一个自定义卷。
添加自定义卷customVolumes: | - name: custom-secret secret: secretName: custom-secret //{{template "artifactory.name"。}} -unified-secret
要使用卷,需要将卷挂载定义为自定义init或sidecar容器的一部分。
下面的示例展示了如何在Artifactory中将卷挂载定义为sidecar容器的一部分。
artifactory: customSidecarContainers:—name: side-car-container volumeMounts:—name: custom-secret mountPath: /opt/custom-secret。yaml子路径:custom-secret。yaml readOnly: true
通过在容器模板中设置以下内容,可以将侧边车配置为作为自定义用户运行。
#以root (id为0)运行容器示例securityContext: runAsUser: 0 fsGroup: 0
使用统一秘密
竖起旗帜,<产品图表名称>
.unifiedSecretInstallation
,真正的
如果您想安装一个统一的秘密,它结合了所有的秘密,包括自定义秘密。缺省情况下,该标志为false,秘密不统一。
如果将标志设置为true,则更新secretName
在自定义卷中,{{template "artifactory-ha.name"。}} -unified-secret
,然后运行安装。
下面的示例展示了当您希望使用统一秘密时如何在Artifactory中定义自定义卷。
添加自定义卷customVolumes: | - name: custom-secret secret: secretName: {{template "artifactory.name"。}} -unified-secret
作为最佳实践,我们建议使用易于识别的名称来命名自定义秘密。
Artifactory高可用性
Artifactory存储
Artifactory HA支持广泛的存储后端(有关更多信息,请参阅Artifactory HA存储选项).
在此图表中,您将设置想要使用的存储类型artifactory.persistence.type
并传递所需的配置设置。此图表中的默认存储为文件系统
复制,其中数据被复制到所有节点。
所有存储配置(NFS除外)都有默认配置artifactory.persistence.redundancy
参数。这用于设置应该存储在集群节点中的二进制文件的数量副本。一旦在初始部署时设置了这个值,就不能使用Helm更新它。建议将该值设置为大于集群大小一半的数字,并且永远不要将集群缩小到小于此数字的大小。
警告:使用外部Blob存储时使用PVC
当使用外部blob存储(例如AWS S3、Azure blob存储或谷歌存储)时,仍然需要在PVC(持久卷索赔)中持久化临时最终存储,以防止与外部存储的连接丢失或Artifactory pod崩溃。
避免使用PVC可能导致数据丢失的情况下,计划外吊舱终止。
在OpenShift集群上部署Artifactory,使用Azure PostgreSQL数据库服务
当在OpenShift集群上部署Artifactory并使用Azure PostgreSQL数据库服务时,该服务需要TLS加密数据库连接。要了解更多信息,请参见元数据服务故障处理.
使用现有的数量索赔
使用主节点的现有卷声明
要为Artifactory主节点存储使用现有卷声明,您需要执行以下操作。
根据名称创建持久卷声明
体积- <发布名> -artifactory-ha-primary-0
例如,volume-myrelease-artifactory-ha-primary-0
.将参数传递给
舵安装
而且执掌升级
....——设置artifactory.primary.persistence.existingClaim = true
使用成员节点的现有卷声明
要为Artifactory成员节点存储使用现有卷声明,您需要执行以下操作。
根据处定义的副本数量创建持久卷声明
artifactory.node.replicaCount
通过名字体积- <发布名> -artifactory-ha-member——<序数>
,例如,volume-myrelease-artifactory-ha-member-0
而且volume-myrelease-artifactory-ha-primary-1
.将参数传递给
舵安装
而且执掌升级
....——设置artifactory.node.persistence.existingClaim = true
使用现有的共享卷声明
要使用跨所有节点共享的现有卷声明(用于数据和备份),需要执行以下操作。
使用ReadWriteMany创建符合命名约定的pvc。
{{template "artifactory-ha。fullname”。}}-data-pvc-
{{template "artifactory-ha. xml "。fullname”。}} -backup-pvc 这是一个示例,显示正在使用2个现有的卷索赔。
Myexample-artifactory-ha-data-pvc-0 myexample-artifactory-ha-data-pvc-1 myexample-artifactory-ha-backup-pvc
设置
artifactory.persistence.fileSystem.existingSharedClaim.enabled
在values.yaml
文件真正的
.——set artificial .persistence. filessystem . existingsharedclaim。enabled=true——set artifact .persistence. filessystem . existingsharedclaim . numberofexistingclaims =2
添加许可证
要激活Artifactory HA,必须安装适当的许可证作为安装的一部分。有三种方法来管理许可证:通过Artifactory UI、REST API或Kubernetes Secret。
指定多个许可证
无论是在Artifactory UI中,使用REST API还是在artifactory.cluster.license
文件中,请确保许可证由换行符分隔。
最简单和推荐的方法是使用Artifactory UI。使用Kubernetes Secret或REST API适合高级用户,更适合自动化。
您应该只使用其中一种方法。在集群运行时在它们之间切换可能会禁用Artifactory HA集群。
选项A:使用REST API
您可以通过REST API.请注意,REST API在许可中使用“\n”作为换行符(这是目前推荐的方法)。
选项B:使用Artifactory UI
一旦主集群开始运行,打开Artifactory UI并在UI中插入许可证。看到HA安装和设置欲知详情。
一次性输入所有许可证,每个许可证用换行符分隔。如果您一次添加一个许可证,您可能会被重定向到没有许可证的节点,并且不会为该节点加载UI。
选项C:使用Kubernetes Secret
重要的
此方法仅与初始部署相关。一旦部署了Artifactory,您就不应该继续传递这些参数,因为许可证已经被持久化到Artifactory的存储中(它们将被忽略)。更新许可证应该通过Artifactory UI或REST API完成。
您可以将Artifactory许可证部署为Kubernetes秘密.您需要准备一个文本文件,并将许可证写在其中。如果添加多个license,则添加到同一个文件中。记得加上每一行之间有两行新线许可证。
创建Kubernetes secret(假设本地许可证文件为'
art.lic
”)。Kubectl创建了一个秘密通用的artifactory-cluster-license——from-file=./art.lic
创建一个
license-values.yaml
.artifactory: license: secret: artifactory-cluster-license dataKey: art.lic
使用
license-values.yaml
.
在JFrog平台上执行如下命令。Helm upgrade——install jfrog-platform——命名空间jfrog-platform jfrog/jfrog-platform -f license-values.yaml
为Artifactory执行以下命令。
helm upgrade——install artifactory——set artifactory.license.secret=artifactory-cluster-license,artifactory.license. datakey =artifactory。Lic——命名空间artifactory jfrog/artifactory
创建Kubernetes Secret作为Helm Release的一部分
创建一个
license-values.yaml
.artifactory: license: licenseKey: |-
使用
license-values.yaml
.Helm upgrade——install jfrog-platform——命名空间jfrog-platform jfrog/jfrog-platform -f license-values.yaml
此方法仅与初始部署相关。一旦部署了Artifactory,您就不应该继续传递这些参数,因为许可证已经被持久化到Artifactory的存储中(它们将被忽略)。更新许可证应该通过Artifactory UI或REST API完成。
如果您想继续使用相同的方法管理Artifactory许可证,您可以使用中所示的copyOnEveryStartup示例values.yaml
文件。
缩放Artifactory集群
Artifactory HA的一个关键特性是能够使用——设置artifactory.node.replicaCount = $ {CLUSTER_SIZE}
如果需要,还可以调整集群的大小。
在扩展
当进行扩展时,如果密码是自动生成的,则需要显式地传递数据库密码(这是附带的PostgreSQL Helm图表的默认密码)。
要获取当前数据库密码,请使用以下方法。
export DB_PASSWORD=$(kubectl get $(kubectl get secret -o name | grep postgresql) -o jsonpath="{.data. txt "" | base64——decode)
重要的
使用——设置postgresql.postgresqlPassword = $ {DB_PASSWORD}
每一次缩放操作都可以防止错误配置的集群。
扩大规模:
假设您有一个具有2个成员节点的集群,并且您希望扩展到3个成员节点(总共4个节点),请使用以下方法。
#扩展到4个节点(1个主节点和3个成员节点)replicaCount=3——设置postgresql。postgresqlPassword=${DB_PASSWORD} --namespace artifactory-ha jfrog/artifactory-ha
缩小规模:
#缩小到2个成员节点helm upgrade——install artifactory-ha——set artificial .nodereplicaCount=2——设置postgresql。postgresqlPassword=${DB_PASSWORD} --namespace artifactory-ha jfrog/artifactory-ha
因为Artifactory是作为Kubernetes有状态集运行的,所以删除节点不会删除持久卷。您需要显式地删除它,如下所示。
#列出pvc kubectl得到pvc #删除pvc最高序数!#在这个例子中,最高的节点序数是2,所以需要删除它的存储空间。Kubectl删除PVC volume-artifactory-node-2
Artifactory高级选项
使用secret方式添加license
使用秘密添加许可证有两种方式:
这些方法只与初始部署相关。一旦部署了Artifactory,您就不应该继续传递这些参数,因为许可证已经被持久化到Artifactory的存储中(它们将被忽略)。更新许可证应该通过Artifactory UI或REST API完成。如果您想继续使用相同的方法管理Artifactory许可证,您可以使用中所示的copyOnEveryStartup示例values.yaml
文件。
使用已存在的Kubernetes Secret创建License
您可以将Artifactory许可证部署为Kubernetes秘密通过准备一个写有许可证的文本文件,并从中创建一个Kubernetes秘密。
#创建Kubernetes secret(假设本地许可证文件是'art.lic') kubectl Create secret generic -n artifactory artifactory-license——from-file=./art。lic #将license传递给helm helm upgrade—install artifactory—set artifactory.license.secret=artifactory-license,artifactory.license. datakey =art。Lic——命名空间artifactory jfrog/artifactory
在Helm发布中创造一个秘密
要创建一个秘密作为Helm发布的一部分,请更新values.yaml
然后运行安装程序。
artifactory: license: licenseKey: |-helm upgrade——install artifactory -f values。Yaml——命名空间artifactory jfrog/artifactory
与安全相关的问题
下一节将讨论Helm Charts安装中与安全相关的问题,例如管理订阅和秘密、网络策略等等。
自定义数据库密码
您可以重写指定的数据库密码(在values.yaml
),通过在安装命令行中将其作为参数传递。
Helm upgrade——install artifactory——命名空间artifactory——set postgresql。postgresqlPassword = 12 _hx34qwerq2 jfrog / artifactory
类中传入其他参数,可以以相同的方式自定义其他参数舵安装
命令行。
创建入口对象
要让Helm创建带有主机名的入口对象,请将这些行添加到artifactory-ingress-values.yaml
文件和使用它与您的头盔安装或升级。
ingress: enabled: true hosts:—artifactory.company.com artifactory: service: type: NodePort nginx: enabled: false helm upgrade——install artifactory- f artifactory-ingress-values。Yaml——命名空间artifactory jfrog/artifactory
如果您的集群允许自动创建/检索TLS证书(例如,通过使用证书管理器;有关更多信息,请参见cert-manager
),按如下方式创建入口对象。
若要手动配置TLS,首先为您希望保护的地址创建/检索一个密钥和证书对。
接下来,在名称空间中创建TLS秘密。
Kubectl创建秘密TLS artifactory-tls——cert=path/to/ TLS。cert——关键=路径/ / tls.key
在自定义的Artifactory Ingress TLS部分中包含秘密的名称以及所需的主机名
values.yaml
文件。##如果为true,将创建Artifactory ingress ## enabled: true ## Artifactory ingress主机名##启用ingress时必须提供## hosts: - artifactory.domain.com注解:kubernetes。io/ TLS -acme: "true" ## Artifactory Ingress TLS配置##必须在命名空间中手动创建秘密## TLS: - secretName: Artifactory - TLS hosts: - artifactory.domain.com
使用入口注释
下面是一个Ingress注释的例子,它允许Artifactory使用Repository Path方法作为Docker注册表工作。有关更多信息,请参见Artifactory作为Docker注册表.
ingress: enabled: true defaultBackend: enabled: false hosts:—myhost.example.com annotations: ingress.kubernetes。Io /force-ssl-redirect: "true" ingress.kubernetes。Io /proxy-body-size: "0" ingress.kubernetes。Io /proxy-read-timeout: "600" ingress.kubernetes. log日志含义kubernetes.io/ingress.class: nginx nginx.ingress. kubernetes.io/ proxy-send-timeout: "600"Io /configuration-snippet: | rewrite ^/(v2)/token /artifactory/api/docker/null/v2/token;重写^ / (v2 )/([^\/]*)/(.*) / artifactory / api /码头工人/ 2美元/ 1 / 3美元;nginx.ingress.kubernetes。Io /proxy-body-size: "0" tls: - hosts: - "myhost.example.com"
如果您使用Artifactory作为SSO提供者(例如,使用Xray),您将需要使用以下注释,并更改您的域。
. .注释:kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes。io/configuration-snippet: | proxy_pass_header Server;proxy_set_header X-JFrog-Override-Base-Url https://;
添加额外的入口规则
您还可以选择向Artifactory Ingress添加额外的Ingress规则。这个用例的一个例子是将/xray路径路由到xray。要做到这一点,只需将以下内容添加到artifactory-values.yaml
文件并运行升级。
ingress: enabled: true defaultBackend: enabled: false注解:kubernetes.io/ingress.class: nginx nginx.ingress. kubernetes.io/ingress.class: nginx.ingress.kubernetes. class: nginx.ingress.kubernetes. class: nginx.ingress.kubernetesio / configuration-snippet: |重写”(?我)/ x光 (/|$)(.*)"/ 2美元打破;additionalRules: | - host:http: paths:—path: /后端:serviceName: servicePort: - path: /xray后端:serviceName: servicePort: - path: /artifactory后端:serviceName: {{template "artifactory.nginx. bginx . bginx . bb4 - path: /artifactory后端:serviceName: {{template "artifactory.nginx. bginx . bginx . bb4 -fullname”。}} servicePort: {{. values .nginx。安装xray jfrog/artifactory -f artifactory-values.yaml
为Replicator服务使用专用入口对象
您还可以选择向Replicator服务添加一个附加的Ingress对象。此用例的一个示例可以是路由/复制因子
路径到Artifactory。要做到这一点,只需将以下内容添加到artifactory-values.yaml
文件。
artifactory: replicator: enabled: true ingress: name:hosts:—myhost.example.com annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes. class: nginx。Io /proxy-buffering: "off" nginx.ingress.kubernetes. Io /proxy-buffering: "off"Io /configuration-snippet: | chunked_transfer_encoding on;tls:—hosts:—"myhost.example.com" secretName:
在另一个负载均衡器后面运行入口
如果你正在运行一个用于卸载TLS的负载均衡器,在Nginx Ingress Controller前面,或者如果你正在设置X-Forwarded - *
头文件时,您可能希望启用use-forwarded-headers = true
选择。否则,Nginx将用它从外部负载均衡器接收到的请求信息填充这些头。
执行以下命令启用该选项。
Helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx Helm repo update kubectl create namespace ingress-nginx Helm upgrade——install ingress-nginx——namespace ingress-nginx ingress-nginx/ingress-nginx——set-string controller.config.use-forwarded-headers=true
另外,创建一个values.yaml
包含以下内容的文件。然后安装nginx-ingress
使用您创建的值文件。
控制器:config: use-forward -headers: "true"
创建完成后,执行以下命令。yaml文件。
Helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx Helm repo update kubectl create namespace ingress-nginx Helm upgrade——install ingress-nginx——namespace ingress-nginx ingress-nginx/ingress-nginx -f value .yaml
日志分析
FluentD,普罗米修斯和Grafana
配置Prometheus和Grafana通过使用从Artifactory收集度量FluentD,请参阅日志分析存储库.存储库包含一个文件artifactory-values.yaml
可以使用这个图表来部署Prometheus、Service Monitor和Grafana。
配置NetworkPolicy
NetworkPolicy指定在这个名称空间中允许哪个Ingress和Egress。为了提高系统安全性,建议尽可能更具体。
在networkpolicy
部份values.yaml
文件中,您可以指定NetworkPolicy对象的列表。
- 对于podSelector, Ingress和Egress,如果没有提供,则为默认值
——{}
应用,即允许一切。 一个完整的(但非常开放的)示例,结果创建了2个NetworkPolicy对象:
networkpolicy: #允许所有的入口和出口到Artifactory。- name: artifactory podSelector: matchLabels: app: artifactory egress: - {} ingress: -{} #允许从artifactory pod连接到postgresql pod,但不允许流量离开postgresql pod。—name: postgres podSelector: matchLabels: app: postgresql ingress:—from:—podSelector: matchLabels: app: artifactory
先进的存储选项
文件存储是二进制文件物理存储的地方,它是两个仓库是Artifactory存储和管理资源的重要组成部分2022世界杯阿根廷预选赛赛程.Artifactory支持广泛的存储后端;在本节中,我们详细介绍了Artifactory存储的一些高级选项;有关更多信息,请参见Artifactory文件存储选项.
设置人工持久化存储类型
在Helm图表中,设置所需的存储类型artifactory.persistence.type
并传递所需的配置设置。此图表中的默认存储为文件系统
复制,其中数据被复制到所有节点。
重要的
除了网络文件系统(NFS),所有存储配置都有默认值artifactory.persistence.redundancy
参数。这用于设置应该在集群节点中存储多少个二进制文件的副本。一旦在初始部署时设置了这个值,就不能使用Helm更新它。建议将该值设置为大于集群大小一半的数字,并且永远不要将集群缩小到小于此数字的大小。
要使用所选桶作为HA的文件存储,请将文件存储的参数传递给头盔安装/升级。
设置网络文件系统(NFS)存储
要使用NFS服务器作为集群的存储,需要执行以下操作。
设置NFS服务器并获取其IP为
NFS_IP
.创建
数据
而且备份
NFS导出目录下的所有目录都有写权限。将NFS参数传递给Helm安装/升级,如下所示。
nfs: nfs: ip: ${NFS_IP}
配置NFS持久化类型
在某些情况下,Helm Chart不可能为Artifactory自动设置NFS挂载。在这些情况下(例如AWS EFS),您将使用artifactory.persistence.type =文件系统,
即使你潜在的坚持实际上是网络文件系统.
同样的事情也适用于使用速度较慢的存储设备(比如廉价磁盘)作为Artifactory的主存储解决方案;这意味着从网络文件系统/慢速存储中提供高使用率的文件会花费一些时间,这就是为什么您希望将缓存文件系统存储在本地磁盘上(在SSD等快速磁盘上)。
创建一个
values.yaml
文件。按照以下方法将卷挂载到快速存储设备。
##设置您的卷挂载到您的快速存储设备customVolumes: | - name: my-cache-fast-storage persistentVolumeClaim: claimName: my-cache-fast-storage-pvc ##启用缓存并配置缓存目录customVolumeMounts: | - name: my-cache-fast-storage mountPath: /my-fast-cache-mount ##使用您创建的值文件安装helm chart persistence: cacheProviderDir: /my-fast-cache-mount fileSystem: cache: enabled: true
使用您创建的值文件安装Artifactory。
ArtifactoryHelm upgrade——install artifactory jfrog/artifactory——命名空间artifactory -f values.yaml
Artifactory哈Helm upgrade——install artifactory-ha jfrog/artifactory-ha——namespace artifactory-ha -f values.yaml
谷歌存储
您可以通过传递下面的谷歌存储参数来使用谷歌存储桶作为集群的文件存储来舵安装
而且执掌升级
.有关更多信息,请参见谷歌云存储.
Artifactory: persistence: type: google-storage-v2
Artifactory哈
要使用GCP服务帐户,Artifactory需要一个gcp.credentials.json
与binaraystore.xml文件在同一目录下。
这可以通过运行以下命令来生成。
Gcloud iam service-accounts keys create——iam-account . sh
这将生成以下内容,可以保存到文件中或复制到您的values.yaml
.
{“类型”:“service_account”、“project_id”:“< project_id >”,“private_key_id ": "?????", " private_key”:“——开始私钥\ n ? ?= = \ n——结束私钥\ n”、“client_email”:“? ? @j < project_id > .iam.gserviceaccount.com”、“client_id ": "???????", " auth_uri”:“https://accounts.google.com/o/oauth2/auth”、“token_uri”:“https://oauth2.googleapis.com/token”,“auth_provider_x509_cert_url”:“https://www.googleapis.com/oauth2/v1/certs”,“client_x509_cert_url”:“https://www.googleapis.com/robot/v1..”。}
一种选择是自己创建ecret然后把它传给你们舵安装
在一个习俗中values.yaml
.
#从之前创建的文件中创建Kubernetes secret#重要提示:该文件必须名为“gcp.credentials”。Json”,因为这个稍后会用作密钥!Kubectl创建秘密通用artifactory-gcp-creds——from-file=./gcp.credentials.json
在你的习惯中设置这个秘密values.yaml
.
artifactory: persistence: googleStorage: gcpServiceAccount: enabled: true customSecretName: artifactory-gcp-creds
另一种选择是将生成的配置直接放在自定义中values.yaml
然后一个秘密就会由此产生。
artifactory: persistence: googleStorage: gcpServiceAccount: enabled: true config: | {"type": "service_account", "project_id": "", "private_key_id": "?????", "private_key": "-----BEGIN PRIVATE KEY-----\n????????= = \ n——结束私钥\ n”、“client_email”:“? ? @j < project_id > .iam.gserviceaccount.com”、“client_id ": "???????", " auth_uri”:“https://accounts.google.com/o/oauth2/auth”、“token_uri”:“https://oauth2.googleapis.com/token”,“auth_provider_x509_cert_url”:“https://www.googleapis.com/oauth2/v1/certs”,“client_x509_cert_url”:“https://www.googleapis.com/robot/v1..”。}
Aws s3 v3
若要使用AWS S3桶作为集群的文件存储并使用官方AWS SDK访问它,请参阅S3官方SDK二进制提供程序.如果您想直接将IAM角色附加到Artifactory pod上(而不是将其附加到Artifactory运行的机器上),请使用此模板。
您应该将此与Kubernetes机制结合起来,将IAM角色附加到pod,例如kube2iam.
传递AWS S3 V3参数和指向IAM角色的注释(当使用IAM角色时;这是kube2iam特有的,可能会根据实现而有所不同)舵安装
而且执掌升级
.
#使用显式凭证:artifactory: persistence: type: aws-s3-v3 awsS3V3: region: ${AWS_REGION} bucketName: ${AWS_S3_BUCKET_NAME} identity: ${AWS_ACCESS_KEY_ID} credential: ${AWS_SECRET_ACCESS_KEY} useInstanceCredentials: false #使用现有IAM角色artifactory:注解:' IAM \.amazonaws\.com/role'=${AWS_IAM_ROLE_ARN} persistence: type: aws-s3-v3 awsS3V3: region: ${aws_s3_bucketname: ${AWS_S3_BUCKET_NAME}
要启用云存储直接下载,使用以下方法。
artifactory: persistence: awsS3V3: enableSignedUrlRedirect: true
微软Azure Blob存储
通过将Azure Blob Storage参数传递给舵安装
而且执掌升级
.有关更多信息,请参见Azure Blob存储二进制提供程序.
artifactory: persistence: type: azureBlob azureBlob: accountName: ${AZURE_ACCOUNT_NAME} accountKey: ${AZURE_ACCOUNT_KEY} endpoint: ${AZURE_ENDPOINT} containerName: ${AZURE_CONTAINER_NAME}
要将持久卷声明与Azure Blob Storage一起用作缓存目录,还要将以下参数传递给舵安装
而且执掌升级
(验证mountPath
而且cacheProviderDir
指向相同的位置)。
artifactory: persistence: existingClaim: ${YOUR_CLAIM} mountPath: /opt/cache-dir cacheProviderDir: /opt/cache-dir
自定义binarystore.xml
提供自定义有两个选项binarystore.xml.
直接在values.yaml.
artifactory: persistence: binarstorexml: |
创造你自己的秘密,并传递给你的
舵安装
命令。#准备你的自定义秘密文件(custom- binarstore .yaml) kind: Secret apiVersion: v1 metadata: name: custom-binarystore labels: app: artifactory chart: artifactory stringData: binarstore .xml: |-
接下来,从文件中创建一个秘密。
Kubectl apply -n artifactory -f ./custom- binarstore .yaml
把秘密传给你的
舵安装
命令。ArtifactoryHelm upgrade—install artifactory—命名空间artifactory—set artifactory.persistence。customBinarystoreXmlSecret = custom-binarystore jfrog / artifactory
Artifactory哈Helm upgrade——install artifactory-ha——namespace artifactory-ha——set artifactory.persistence。customBinarystoreXmlSecret = custom-binarystore jfrog / artifactory-ha
添加扩展
扩展(也称为插件)是扩展和集成您的系统的软件组件。大多数集群管理员将使用Kubernetes的托管或分发实例。在本节中,我们包含了一些可以使用Helm Charts在Artifactory中使用的扩展。
使用Logger Sidecars
Logger sidecars使您能够跟踪Artifactory中的各种日志(请参阅values.yaml
文件)。
要获得pod中的容器列表,请执行以下操作。
kubectl get pods -n <命名空间>-o jsonpath='{.spec.containers[*].name}' | tr ' ' '\n'
使用以下命令查看特定日志。
kubectl logs -n-c . txt
添加用户插件
用户插件允许您扩展Artifactory的行为,例如,创建Kubernetes secret。
创建一个秘密Artifactory用户插件使用如下命令。
#使用单用户插件kubectl创建秘密通用archive-old-artifacts——from-file=archiveOldArtifacts。groovy——namespace=artifactory #单独用户插件的秘密配置文件kubectl创建秘密通用webhook——from-file=webhook。groovy——从文件= webhook.config.json。——名称空间= artifactory示例
创建一个
plugin-values.yaml
文件,其中包含插件的秘密名称和Artifactory图表artifactory用户插件的秘密列表。每个插件的文件都有一个秘密。userPluginSecrets: - archive-old-artifacts - webhook - cleanup copyOnEveryStartup: - source: /artifactory_bootstrap/plugins/* target: etc/artifactory/plugins/artifactory。copyOnEveryStartupis used to copy and overwrite the files from /artifactory_bootstrap/plugins to /opt/jfrog/artifactory/var/etc/artifactory/plugins every time the pod is restarted.
Artifactory HA图表artifactory用户插件的秘密列表。每个插件的文件都有一个秘密。userPluginSecrets: - archive-old-artifacts - webhook - cleanup primary: preStartCommand: "mkdir -p {{. values . artifacts .persistence. properties . "mountPath}}/etc/artifactory/plugins/ && cp -Lrf /artifactory_bootstrap/plugins/* {{. values .artifactory.persistence. persistence. plugin .插件目录mountPath}} / etc / artifactory /插件/”artifactory.primary。preStartCommandis used to copy and overwrite the files from /artifactory_bootstrap/plugins to /opt/jfrog/artifactory/var/etc/artifactory/plugins every time the pod is restarted.
你现在可以通过
plugins.yaml
您在Helm install命令中创建的文件,如下所示,使用用户插件部署Artifactory。ArtifactoryHelm upgrade——install artifactory jfrog/artifactory——命名空间artifactory -f plugin-values.yaml
Artifactory哈Helm upgrade——install artifactory-ha jfrog/artifactory-ha——namespace artifactory-ha -f plugin-values.yaml
或者,您可能处于这样一种情况,您想要在Helm图中创建一个依赖于此图的秘密。在这种情况下,秘密的名称可能是通过模板函数动态生成的,因此传递静态命名的秘密是不可能的。
在这种情况下,Helm图表支持将字符串作为模板通过tpl
函数——只需将包含用于命名秘密的模板语言的原始字符串作为值传递,而不是将以下内容添加到图表中values.yaml
文件。
artifactory: # artifactory依赖的名称artifactory: userPluginSecrets: - '{{template "my-chart. txtfullname”。}}’
使用ConfigMaps存储非机密数据
configMap是一个API对象,用于以键-值对的形式存储非机密数据。如果您想要挂载一个自定义文件到Artifactory,可以是一个init shell脚本,也可以是一个自定义配置文件(例如logback.xml
),你可以使用此选项。
为Artifactory创建自定义configmap
创建一个configmaps.yaml
文件,然后使用它与您的Helm安装/升级。这将反过来做以下事情:
创建一个指向configMap的卷
artifactory-configmaps
.将这个configMap挂载到
/ tmp / my-config-map
使用customVolumeMounts
.将我们挂载的shell脚本设置为
postStartCommand
.复制
logback.xml
文件美元ARTIFACTORY_HOME / etc / artifactory
目录中。artifactory: configMaps: | logback.xml: | <配置调试="false">
%date [%-5level] \(%-20c{3}:%L\) %message%n < appenter -ref ref="CONSOLE"/> Artifactory安装artifactory -f configmaps。Yaml——命名空间artifactory jfrog/artifactory
Artifactory哈Helm upgrade——install artifactory-ha jfrog/artifactory-ha——namespace artifactory-ha -f values.yaml
使用Nginx创建自定义Nginx .conf文件
创建
nginx.conf
文件:Kubectl创建configmap nginx-config——from-file=nginx.conf
将configMap传递给Helm安装:
Artifactory头盔升级—安装artifactory—设置nginx。customConfigMap=nginx-config——namespace artifactory jfrog/artifactory
Artifactory哈Helm upgrade——install artifactory-ha jfrog/artifactory-ha——namespace artifactory-ha -f values.yaml
使用外部数据库
对于生产级安装,建议使用带有静态密码的外部PostgreSQL。
PostgreSQL
在某些情况下,你会希望使用一个具有不同数据库名称的外部PostgreSQL,例如my-artifactory-db;在这种情况下,你需要设置一个自定义的PostgreSQL连接URL,其中my-artifact -db是数据库的名称。
这可以通过以下参数来完成。
postgresql: enabled: false数据库:type: postgresql driver: org.postgresql.Driver url: 'jdbc:postgresql://${DB_HOST}:${DB_PORT}/my-artifactory-db' user:password: . db
你必须设置postgresql.enabled = false
为图表使用数据库。*
参数。没有它,他们将被忽视。
其他数据库类型
在某些情况下,您可能希望使用不同的数据库,而不是所附的数据库PostgreSQL。有关更多信息,请参见配置数据库.
Artifactory Docker的官方镜像包括PostgreSQL数据库驱动程序。对于其他数据库类型,您必须将相关的数据库驱动程序添加到Artifactory的tomcat/lib中。
这可以通过以下参数来完成。
#确保你的Artifactory Docker镜像中有MySQL数据库驱动postgresql: enabled: false database: type: MySQL driver: com.mysql.jdbc.Driver url:user: password: Artifactory: preStartCommand: "mkdir -p /opt/jfrog/ Artifactory /var/bootstrap/ Artifactory /tomcat/lib;CD /opt/jfrog/artifactory/var/bootstrap/artifactory/tomcat/lib && curl https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.41/mysql-connector-java-5.1.41.jar -o /opt/jfrog/artifactory/var/bootstrap/artifactory/tomcat/lib/mysql-connector-java-5.1.41.jar"
你必须设置postgresql.enabled = false
为图表使用数据库。*
参数。没有它,他们将被忽视。
使用外部Oracle数据库配置Artifactory
要将Artifactory与Oracle数据库一起使用,所需的即时客户端库文件,libaio
必须复制到tomcat自由
.此外,您还需要设置LD_LIBRARY_PATH
env变量。
用配置创建一个值文件。
postgresql: enabled: false database: type: oracle driver: oracle.jdbc. oracledriver url:
user: password: artifactory: preStartCommand: "mkdir -p /opt/jfrog/artifactory/var/bootstrap/artifactory/tomcat/lib;CD /opt/jfrog/artifactory/var/bootstrap/artifactory/tomcat/lib && curl https://download.oracle.com/otn_software/linux/instantclient/19600/instantclient-basic-linux.x64-19.6.0.0.0dbru.zip -o instantclient-basic-linux.x64-19.6.0.0.0dbru.zip &&解压缩instantclient-basic-linux.x64-19.6.0.0.0dbru.zip && cp instantclient_19_6/ojdbc8.jar。&& rm -rf instantclient-basic-linux.x64-19.6.0.0.0dbru.zip instantclient_19_6" extraEnvironmentVariables:—名称:LD_LIBRARY_PATH值:/opt/jfrog/artifactory/var/bootstrap/artifactory/tomcat/lib .zip 使用您创建的值文件安装Artifactory。
ArtifactoryHelm upgrade——install artifactory jfrog/artifactory——命名空间artifactory -f values-oracle.yaml
Artifactory哈Helm upgrade——install artifactory-ha jfrog/artifactory-ha——namespace artifactory-ha -f values.yaml
如果这是6的升级版。X到7。X,相加相同
preStartCommand
下artifactory.migration.preStartCommand
.
使用已存在的Kubernetes Secret
如果您将数据库凭据存储在已存在的Kubernetes Secret中,您可以通过database.secrets
而不是database.user
而且database.password
.
#创建一个包含数据库凭证的秘密postgresql: enabled: false database: secrets: user: name: "my-secret" key: "user" password: name: "my-secret" key: "password" url: name: "my-secret" key: "url"
基础设施定制
Artifactory内存和CPU资源2022世界杯阿根廷预选赛赛程
Artifactory Helm图表支持配置资源请求,并对Artifactory, Nginx和PostgreSQL进行限制。默认情况下,这些设置被注释掉。它是高度建议设置这些,这样您就可以完全控制分配的资源和限制。2022世界杯阿根廷预选赛赛程Artifactory java内存参数也可以(也应该)设置为与所分配的资源相匹配2022世界杯阿根廷预选赛赛程artifactory.javaOpts.xms
而且artifactory.javaOpts.xmx
.
#设置资源请求和限制到所有pods的示例(包括将java内存设置传递给Artifactory) Artifactory: javaOpts: xms: "1g" xmx: "4g" resources: requests: memory: "1Gi" cpu: "500m" limits: memory: "4Gi" c2022世界杯阿根廷预选赛赛程pu: "2" nginx: resources: requests: memory: "250Mi" cpu: "100m" limits: memory: "500Mi" cpu: "250m"
#设置资源请求和限制到所有pods的示例(包括将java内存设置传递给Artifactory) Artifactory: primary: resources: requests: memory: "1Gi" cpu: "500m" limits: memory: "4Gi" c2022世界杯阿根廷预选赛赛程pu: "2" node: resources: requests: memory: "1Gi" cpu: "500m" limits: memory: "4Gi" cpu: "2" javaOpts: xms: "1g" xmx: "4g" initContainers: resources: requests: memory: "64Mi" cpu: "10m" limits: memory: "128Mi" cpu: "250m" postgresql: resources: requests: memory: "512Mi" cpu: "200m" limits:memory: "1Gi" cpu: "1" nginx: 2022世界杯阿根廷预选赛赛程resources: requests: memory: "250Mi" cpu: "100m" limits: memory: "500Mi" cpu: "250m"
虽然可以通过这种方式设置资源限制和请求,但建议对小型、中型和大2022世界杯阿根廷预选赛赛程型安装使用预构建的值文件,并在必要时根据需要更改它们。
自定义Docker注册表
如果您需要从私有注册表中提取Docker映像,则需要创建一个Kubernetes Docker注册表秘密并在安装/升级时传递给Helm。
#创建Docker注册表秘密名为“regsecret”kubectl Create secret Docker -registry regsecret——Docker -server=——Docker -username= ——Docker -password= ——Docker -email= helm upgrade——install artifactory——set imagePullSecrets=regsecret——namespace artifactory jfrog/artifactory
引导Artifactory
当使用Helm Charts时,您可以引导Artifactory管理员密码和Artifactory配置。
引导Artifactory管理员密码
您可以引导管理
用户密码,详见创建默认Admin用户.
创建
admin-creds-values.yaml
并提供IP(默认为127.0.0.1)和密码。artifactory: admin: ip: "
" #示例:"*"允许从任何地方访问username: "admin" password: " " 应用
admin-creds-values.yaml
文件。ArtifactoryHelm upgrade——install artifactory——命名空间artifactory jfrog/artifactory -f admin-creds-values.yaml
Artifactory哈Helm upgrade——install artifactory-ha——命名空间artifactory-ha jfrog/artifactory-ha -f admin-creds-values.yaml
- 重新启动人工豆荚(
Kubectl删除pod
).
引导Artifactory配置
您可以使用Helm Charts引导Artifactory全局和安全配置。这样做,你将需要一个Artifactory订阅.
创建一个
bootstrap-config.yaml
与一个artifactory.config.import.xml
和一个security.import.xml
如下图所示。apiVersion: v1 kind: ConfigMap metadata: name: my-release-bootstrap-config data: artifactory.config.import.xml: |
security.import.xml: | .xml配置文件 在Kubernetes中创建configMap。
Kubectl应用-f bootstrap-config.yaml
使用以下选项之一将configMap传递给Helm。
Artifactoryhelm upgrade—install artifactory—set artifactory.license.secret=artifactory-license,artifactory.license. datakey =art.lic,artifactory。configMapName=my-release-bootstrap-config——namespace artifactory jfrog/artifactory
Artifactory哈设置artifactory.license.secret=artifactory-license,artifactory.license. datakey =art.lic,artifactory. ha。configMapName=my-release-bootstrap-config——namespace artifactory-ha jfrog/artifactory-ha
或
Artifactoryhelm upgrade——install artifactory——set artifactory.license. licensekey =
,artifactory. LICENSE_KEYconfigMapName=my-release-bootstrap-config——namespace artifactory jfrog/artifactory Artifactory哈helm upgrade——install artifactory-ha——set artifactory.license. licensekey =
,artifactory。configMapName=my-release-bootstrap-config——namespace artifactory-ha jfrog/artifactory-ha
有关更多信息,请参见引导Artifactory全局配置而且引导Artifactory安全配置.
每次启动时复制配置文件
存储在/ artifactory-extra-conf
目录只复制到ARTIFACTORY_HOME /等
第一次启动时的目录。在某些情况下,您可能希望将配置文件复制到ARTIFACTORY_HOME /等
目录。
例如:
的binarystore.xml
文件:如果您使用默认行为,您的binarystore.xml
配置只会在第一次启动时复制,这意味着随着时间的推移对binaryStore.xml
配置将不会被应用。
要确保您的更改应用于每次启动,c用以下值创建一个YAML块:
artifactory: copyOnEveryStartup: - source: /artifactory_bootstrap/ binarstore .xml target: etc/artifactory .xml
来自Artifactory 7.46版。x (Helm charts版本107.46.x), binarstore .xml被复制到
等/ artifactory
在copy-system-configurations
初始化容器。因此,你不需要使用copyOnEveryStartup
用于配置binarstore .xml。用你创建的值文件安装Helm图表:
ArtifactoryHelm upgrade——install artifactory——命名空间artifactory jfrog/artifactory -f values.yaml
Artifactory哈Helm upgrade——install artifactory-ha——命名空间artifactory-ha jfrog/artifactory-ha -f values.yaml
您必须配置Artifactory的任何自定义配置文件,例如logback.xml
:
创建一个configMap
logback.xml
配置。接下来,创建一个
values.yaml
包含以下值的文件:使用配置文件customVolumes: | - name: logback-xml-configmap configMap: name: logback-xml-configmap customVolumeMounts: | - name: logback-xml-configmap mountPath: /tmp/artifactory-logback/ copyOnEveryStartup: - source: /tmp/artifactory-logback/* target: etc/artifactory
用你创建的值文件安装Helm图表:
ArtifactoryHelm upgrade——install artifactory——命名空间artifactory jfrog/artifactory -f values.yaml
Artifactory哈Helm upgrade——install artifactory-ha——命名空间artifactory-ha /jfrog/artifactory-ha -f values.yaml
监控和日志记录
Artifactory JMX配置
对象下的mbean公开org.jfrog.artifactory
域,它使您能够监视存储库、执行器池、存储和HTTP连接池。要了解更多信息,请参见Artifactory JMX mbean.
要在部署中启用JMX,请使用以下命令。
artifactory: javaOpts: jmx: enabled: true
artifactory: primary: javaOpts: jmx: enabled: true node: javaOpts: jmx: enabled: true
这将允许在默认端口9010上使用JMX访问Artifactory;若要将端口更改为您选择的端口,请使用该设置artifactory.javaOpts.jmx.port
.
要在计算机上安装jconsole(或任何类似工具),使用JMX连接到Artifactory,请执行以下步骤。
如上所述启用JMX,并将Artifactory服务更改为LoadBalancer类型。
Artifactoryartifactory: service: type: LoadBalancer javaOpts: jmx: enabled: true
Artifactory哈artifactory: service: type: LoadBalancer primary: javaOpts: jmx: enabled: true node: javaOpts: jmx: enabled: true
的默认设置
java.rmi.server.hostname
服务名(也可以使用artifactory.javaOpts.jmx.host
).要使用jconsole连接到Artifactory,请使用您的主机文件将Artifactory Kuberentes服务IP映射到服务名称,如下面的示例所示。Artifactory< artifactory-service-ip > artifactory——<发布名>
Artifactory哈artifactory-ha- -primary 使用服务地址和端口启动jconsole。
Artifactoryjconsole artifactory——<发布名>:< jmx-port >
Artifactory哈Jconsole artifactory-ha-
-primary: Jconsole :
Artifactory Filebeat
如果您想从Artifactory安装中收集日志,并将它们发送到ELK这样的中央日志收集解决方案,您可以使用这个选项。
创建一个filebeat.yaml
包含以下内容的文件。
filebeat: enabled: true logstashUrl:2022世界杯阿根廷预选赛赛程resources: requests: memory: "100Mi" cpu: "100m" limits: memory: "100Mi" cpu: "100m"
你可以选择自定义filebeat.yaml
发送输出到不同的位置,然后使用它与您的头盔安装/升级。
filebeat: enabled: true filebeatYml: |
安装artifactory -f filebeat。Yaml——命名空间artifactory jfrog/artifactory执掌升级——安装一个rtifactory-ha -f filebeat.yaml --namespace artifactory-ha jfrog/artifactory-ha
中的配置将开始将您的Artifactory日志发送到您选择的日志聚合器filebeatYml
.
在Nginx服务中安装Artifactory和Artifactory HA,并终止SSL (LoadBalancer)
您可以在Nginx的LoadBalancer层进行SSL卸载的同时安装Helm chart,例如:使用AWS ACM证书在LoadBalancer层进行SSL卸载。只需将以下内容添加到artifactory-ssl-values.yaml
文件,然后将其用于Helm安装/升级。
Nginx: https: enabled: false service: ssloffload: true注解:service.beta.kubernetes。Io /aws-load-balance -ssl-cert: "arn:aws:acm:xx-xxxx:xxxxxxxx:certificate/xxxxxxxxxxxxx" service.beta.kubernetes。Io /aws-load-balance -backend-protocol: "http" service.beta.kubernetes。io / aws-load-balancer-ssl-ports:“https”
安装artifactory -f artifactory-ssl-values。Yaml——命名空间artifactory jfrog/artifactory执掌升级——安装一个rtifactory-ha -f artifactory-ssl-values.yaml --namespace artifactory-ha jfrog/artifactory-ha
高级数据库选项的洞察
部署PostgreSQL
有些情况下,你会想要使用外部PostgreSQL而不是封闭的PostgreSQL.有关更多信息,请参见创建Insight PostgreSQL数据库.
这可以通过以下参数来完成。
...——设置postgresql。Enabled =false \——设置数据库。url=${DB_URL} \——设置数据库。user=${DB_USER} \——设置数据库。密码=${DB_PASSWORD} \…
你必须设置postgresql.enabled = false
为图表使用数据库。*
参数。没有它,他们将被忽视。
使用现有的秘密PostgreSQL连接细节
您可以使用现有的秘密来管理数据库连接详细信息。用以下参数将它们传递给安装命令。
导出POSTGRES_USERNAME_SECRET_NAME= export POSTGRES_USERNAME_SECRET_KEY= export POSTGRES_PASSWORD_SECRET_NAME= export POSTGRES_PASSWORD_SECRET_KEY=…——set database.secrets.user.name=${POSTGRES_USERNAME_SECRET_NAME} \key=${POSTGRES_USERNAME_SECRET_KEY} \——set database.secrets.password.name=${POSTGRES_PASSWORD_SECRET_NAME} \——set database.secrets.password。key=${POSTGRES_PASSWORD_SECRET_KEY} \…
部署Elasticsearch
默认情况下,Insight Helm Chart部署Elasticsearch pod。它还使用特权init容器配置Docker主机内核参数。在某些安装中,您可能不允许运行特权容器,在这种情况下,您可以通过配置以下参数禁用Docker主机配置。
——设置elasticsearch.configureDockerHost = false
有些情况下,你会想要使用外部Elasticsearch而不是封闭的Elasticsearch.
这可以通过以下参数来完成。
——设置elasticsearch。Enabled =false \——设置elasticsearch。url=${ES_URL} \——设置elasticsearch。username=${ES_USERNAME} \——设置elasticsearch。密码= $ {ES_PASSWORD} \
任务控制的高级数据库选项
部署PostgreSQL
有些情况下,你会想要使用外部PostgreSQL而不是封闭的PostgreSQL.有关更多信息,请参见创建任务控制PostgreSQL数据库.
这可以通过以下参数来完成。
...——设置postgresql。Enabled =false \——设置数据库。url=${DB_URL} \——设置数据库。user=${DB_USER} \——设置数据库。密码=${DB_PASSWORD} \…
你必须设置postgresql.enabled = false
为图表使用数据库。*
参数。没有它,他们将被忽视。
使用现有的秘密PostgreSQL连接细节
您可以使用现有的秘密来管理数据库连接详细信息。用以下参数将它们传递给安装命令。
导出POSTGRES_USERNAME_SECRET_NAME= export POSTGRES_USERNAME_SECRET_KEY= export POSTGRES_PASSWORD_SECRET_NAME= export POSTGRES_PASSWORD_SECRET_KEY=…——set database.secrets.user.name=${POSTGRES_USERNAME_SECRET_NAME} \key=${POSTGRES_USERNAME_SECRET_KEY} \——set database.secrets.password.name=${POSTGRES_PASSWORD_SECRET_NAME} \——set database.secrets.password。key=${POSTGRES_PASSWORD_SECRET_KEY} \…
部署Elasticsearch
默认情况下,任务控制舵图部署一个Elasticsearch pod。它还使用特权init容器配置Docker主机内核参数。在某些安装中,您可能不允许运行特权容器,在这种情况下,您可以通过配置以下参数禁用Docker主机配置。
——设置elasticsearch.configureDockerHost = false
有些情况下,你会想要使用外部Elasticsearch而不是封闭的Elasticsearch.
这可以通过以下参数来完成。
——设置elasticsearch。Enabled =false \——设置elasticsearch。url=${ES_URL} \——设置elasticsearch。username=${ES_USERNAME} \——设置elasticsearch。密码= $ {ES_PASSWORD} \
管道的高级选项
使用入口安装管道图
先决条件
在部署带有Ingress的管道之前,你需要准备以下内容:
- 正在运行的Kubernetes集群
- 一个Artifactory或Artifactory哈企业+许可证
- 预先创建的存储库
jfrogpipelines
人工类型通用的
与布局maven-2-default
- 预先创建的存储库
- 一个部署Nginx-ingress控制器
- [可选]A部署Cert-manager用于TLS证书的自动管理可以加密
- [可选]https访问所需的TLS秘密
配置准备
获取JFrog Pipelines舵图以获得所需的配置文件。
Helm fetch jfrog/pipelines—untar
的本地副本
values-ingress.yaml
而且values-ingress-passwords.yaml
使用所需的配置值。在
values-ingress.yaml
文件,编辑如下:Artifactory URL
进入主机
进入tls秘密
在
values-ingress-passwords.yaml
文件,年代设置密码uiUserPassword
,postgresqlPassword
而且auth.password
,也一样万能钥匙
而且joinKey
.
安装JFrog管道
执行install命令。
Kubectl创建ns管线helm upgrade——install管线——命名空间管线jfrog/管线-f管线/values-ingress。Yaml -f pipelines/values-ingress-password . Yaml
为管道密码使用外部秘密
密码的最佳实践是使用外部秘密,而不是将密码存储在内部values.yaml
文件。
填写密码,
万能钥匙
而且joinKey
在values-ingress-passwords.yaml
然后创建并安装外部密匙。生成pipeline -system-yaml secret helm template——name-template pipelines/ -s templates/pipeline -system-yaml。Yaml \ -f pipeline /values-ingress-external-secret。Yaml -f pipelines/values-ingress-password . Yaml|kubectl apply --namespace pipelines -f - ## Generate pipelines-database secret helm template --name-template pipelines pipelines/ -s templates/database-secret.yaml \ -f pipelines/values-ingress-passwords.yaml | kubectl apply --namespace pipelines -f - ## Generate pipelines-rabbitmq-secret secret helm template --name-template pipelines pipelines/ -s templates/rabbitmq-secret.yaml \ -f pipelines/values-ingress-passwords.yaml | kubectl apply --namespace pipelines -f -
安装管道。
Helm upgrade——安装管线——命名空间管线jfrog/管线-f values-ingress-external-secret.yaml
设置构建平面
要使用管道,您需要设置一个构建平面。欲了解更多信息,请参见以下内容:
使用外部PostgreSQL
如果你想使用外部PostgreSQL,设置postgresql.enabled = false
和创建values-external-postgresql.yaml
在Yaml配置如下。
global: #内部Postgres必须设置为false postgresql: user: db_username password: db_user_password host: db_host port: 5432 database: db_name ssl: false / true postgresql: enabled: false
验证用户db_username
和数据库db_name
在运行Helm安装/升级之前存在。
Helm upgrade——安装管线——命名空间管线jfrog/管线-f values-external-postgresql.yaml
使用外部保险库
如果要使用外部保险库,请设置vault.enabled = false
并创建一个values-external-vault.yaml
在下面的yaml配置中。
vault: enabled: false global: vault: ## vault url示例# external: https://vault.example.com #运行在同一Kubernetes集群的内部:http://vault-active:8200 url: vault_url token: vault_token ##使用现有的secret设置vault token # existingSecret: vault-secret
如果您将外部Vault令牌存储在已存在的Kubernetes Secret中,您可以通过existingSecret
.
创建一个包含Vault令牌的秘密:
kubectl create secret generic vault-secret——from-literal=token=${VAULT_TOKEN} helm upgrade——install pipelines——命名空间pipelines jfrog/pipelines -f values-external-vault.yaml
使用外部系统。yaml与一个现有的秘密
这适用于用户希望提供自己的高级用例system.yaml
配置管道。这将覆盖现有的system.yaml
在values.yaml
.
你可以通过指定existingSecret existingSecret来使用一个已经存在的秘密,dataKey应该是创建的秘密数据密钥的名称。dataKey:
从图表2.2.0及以上版本开始.Values.existingSecret
变为.Values.systemYaml.existingSecret
而且.Values.systemYaml.dataKey
.
从图表2.3.7及以上版本开始.Values.systemYaml
变为.Values.systemYamlOverride
.
执掌升级——安装管道——名称空间管道jfrog /管道- fvalues-external-systemyaml.yaml
在生产环境中使用Vault
要安全地使用保险库,必须设置disablemlock
在values.yaml
以错误为依据Hashicorp Vault推荐.
对于非生产环境,可以将此值设置为true。H然而,这确实会导致潜在的安全问题,即加密的凭证可能会交换到未加密的磁盘上。出于这个原因,我们建议您总是将这个值设置为false,以确保启用mlock。
Vault: disablemlock: true
Vault: disablemlock: false
卸载和删除
介绍卸载Artifactory和Xray的操作步骤。
卸载Artifactory
卸载只支持Helm v3和on。
使用以下命令卸载Artifactory。
Helm uninstall artifactory && sleep 90 && kubectl delete PVC -l app=artifactory
接下来,删除存储桶和SQL数据库。
Gsutil rm -r gs://artifactory gcloud SQL实例删除artifactory
删除Artifactory
删除Artifactory前不需要卸载。
使用下面的命令删除Artifactory也会删除您的数据卷,您将丢失所有数据。你必须在删除之前备份所有这些信息。
删除Artifactory使用以下命令。
Helm delete artifactory—命名空间artifactory
这将完全删除Artifactory部署(Pro或HA集群)。
删除x光
使用下面的命令删除x射线也会删除您的数据卷,您将丢失所有的数据。你必须在删除之前备份所有这些信息。
删除x射线服务和数据工具,使用以下命令。
helm delete xray——命名空间xray #删除数据磁盘kubectl delete pvc -l release=xray
如果安装Xray时没有提供值rabbitmq.rabbitmqPassword / rabbitmq-ha.rabbitmqPassword
(密码是自动生成的),请按照以下指示进行操作.
执行此命令获取当前密码。
RABBITMQ_PASSWORD=$(kubectl get secret -n
-rabbitmq -o jsonpath="{.data. "Rabbitmq-password}" | base64——decode) 通过传递先前自动生成的秘密来升级版本。
helm upgrade
jfrog/xray——set rabbitmq.rabbitmqPassword=${RABBITMQ_PASSWORD}/rabbitmq-ha.rabbitmqPassword=${RABBITMQ_PASSWORD}
如果Xray是用所有默认值安装的(例如,RabbitMQ/PostgreSQL没有用户提供的值),请遵循以下步骤.
- 检索所有当前密码(RabbitMQ/PostgreSQL),如上一节所述。
通过传递先前自动生成的秘密来升级版本。
Helm upgrade——install xray——命名空间xray jfrog/xray——set rabbitmq-ha。——set postgresql.pos . rabbitmqPassword=