https://github.com/goharbor/harbor-helm

    https://github.com/kubesphere/helm-charts
    image.png

    1. expose:
    2. # 配置服务暴露方式:ingress、clusterIP或nodePort多种类型
    3. type: ingress
    4. # 是否开启 tls
    5. tls:
    6. # 注:如果服务暴露方式是 ingress 并且tls被禁用,则在pull/push镜像时,则必须包含端口。详细查看文档:https://github.com/goharbor/harbor/issues/5291
    7. enabled: true
    8. certSource: auto
    9. auto:
    10. # common name 是用于生成证书的,当类型是 clusterIP 或者 nodePort 并且 secretName 为空的时候才需要
    11. commonName: ""
    12. secret:
    13. # 如果你想使用自己的 TLS 证书和私钥,请填写这个 secret 的名称,这个 secret 必须包含名为 tls.crt 和 tls.key 的证书和私钥文件,如果没有设置则会自动生成证书和私钥文件
    14. secretName: ""
    15. # 默认 Notary 服务会使用上面相同的证书和私钥文件,如果你想用一个独立的则填充下面的字段,注意只有类型是 ingress 的时候才需要
    16. notarySecretName: ""
    17. ingress:
    18. hosts:
    19. core: core.harbor.domain
    20. notary: notary.harbor.domain
    21. controller: default
    22. annotations:
    23. ingress.kubernetes.io/ssl-redirect: "true"
    24. ingress.kubernetes.io/proxy-body-size: "0"
    25. nginx.ingress.kubernetes.io/ssl-redirect: "true"
    26. nginx.ingress.kubernetes.io/proxy-body-size: "0"
    27. notary:
    28. annotations: {}
    29. harbor:
    30. annotations: {}
    31. # ClusterIP 的服务名称
    32. clusterIP:
    33. name: harbor
    34. annotations: {}
    35. ports:
    36. httpPort: 80
    37. httpsPort: 443
    38. # Notary 服务监听端口,只有当 notary.enabled 设置为 true 的时候有效
    39. notaryPort: 4443
    40. # nodePort 的服务名称
    41. nodePort:
    42. name: harbor
    43. ports:
    44. http:
    45. port: 80
    46. nodePort: 30002
    47. https:
    48. port: 443
    49. nodePort: 30003
    50. notary:
    51. port: 4443
    52. nodePort: 30004
    53. # loadBalancer 的服务名称
    54. loadBalancer:
    55. name: harbor
    56. # 如果LoadBalancer支持IP分配,则需要配置IP
    57. IP: ""
    58. ports:
    59. httpPort: 80
    60. httpsPort: 443
    61. notaryPort: 4443
    62. annotations: {}
    63. sourceRanges: []
    64. # Harbor 核心服务外部访问 URL;主要用于:
    65. # 1) 补全 portal 页面上面显示的 docker/helm 命令
    66. # 2) 补全返回给 docker/notary 客户端的 token 服务 URL
    67. # 格式:protocol://domain[:port]。
    68. # 1) 如果 expose.type=ingress,"domain"的值就是 expose.ingress.hosts.core 的值
    69. # 2) 如果 expose.type=clusterIP,"domain"的值就是 expose.clusterIP.name 的值
    70. # 3) 如果 expose.type=nodePort,"domain"的值就是 k8s 节点的 IP 地址
    71. # 如果在代理后面部署 Harbor,请将其设置为代理的 URL
    72. externalURL: https://core.harbor.domain
    73. internalTLS:
    74. enabled: false
    75. certSource: "auto"
    76. trustCa: ""
    77. core:
    78. secretName: ""
    79. crt: ""
    80. key: ""
    81. jobservice:
    82. secretName: ""
    83. crt: ""
    84. key: ""
    85. registry:
    86. secretName: ""
    87. crt: ""
    88. key: ""
    89. portal:
    90. secretName: ""
    91. crt: ""
    92. key: ""
    93. chartmuseum:
    94. secretName: ""
    95. crt: ""
    96. key: ""
    97. # trivy镜像扫描证书相关的配置
    98. trivy:
    99. secretName: ""
    100. crt: ""
    101. key: ""
    102. # 默认情况下开启数据持久化,在k8s集群中需要动态的挂载卷默认需要一个StorageClass对象
    103. # 如果你有已经存在可以使用的持久卷,需要在"storageClass"中指定你的 storageClass 或者设置 "existingClaim"
    104. # 对于存储 docker 镜像和 Helm charts 包,你也可以用 "azure"、"gcs"、"s3"、"swift" 或者 "oss",直接在 "imageChartStorage" 区域设置即可
    105. persistence:
    106. enabled: true
    107. # 设置成"keep"避免在执行 helm 删除操作期间移除 PVC,留空则在 chart 被删除后删除 PVC
    108. resourcePolicy: "keep"
    109. persistentVolumeClaim:
    110. registry:
    111. existingClaim: ""
    112. # 指定"storageClass",或者使用默认的 StorageClass 对象,设置成"-"禁用动态分配挂载卷
    113. storageClass: ""
    114. subPath: ""
    115. accessMode: ReadWriteOnce
    116. size: 5Gi
    117. chartmuseum:
    118. existingClaim: ""
    119. storageClass: ""
    120. subPath: ""
    121. accessMode: ReadWriteOnce
    122. size: 5Gi
    123. jobservice:
    124. existingClaim: ""
    125. storageClass: ""
    126. subPath: ""
    127. accessMode: ReadWriteOnce
    128. size: 1Gi
    129. # 如果使用外部的数据库服务,下面的设置将会被忽略
    130. database:
    131. existingClaim: ""
    132. storageClass: ""
    133. subPath: ""
    134. accessMode: ReadWriteOnce
    135. size: 1Gi
    136. # 如果使用外部的 Redis 服务,下面的设置将会被忽略
    137. redis:
    138. existingClaim: ""
    139. storageClass: ""
    140. subPath: ""
    141. accessMode: ReadWriteOnce
    142. size: 1Gi
    143. trivy:
    144. existingClaim: ""
    145. storageClass: ""
    146. subPath: ""
    147. accessMode: ReadWriteOnce
    148. size: 5Gi
    149. # 定义使用什么存储后端来存储镜像和 charts 包,详细文档地址:https://github.com/docker/distribution/blob/master/docs/configuration.md#storage
    150. imageChartStorage:
    151. # 正对镜像和chart存储是否禁用跳转,对于一些不支持的后端(例如对于使用minio的`s3`存储),需要禁用它。为了禁止跳转,只需要设置`disableredirect=true`即可,详细文档地址:https://github.com/docker/distribution/blob/master/docs/configuration.md#redirect
    152. disableredirect: false
    153. # 指定存储类型:"filesystem", "azure", "gcs", "s3", "swift", "oss",在相应的区域填上对应的信息。
    154. # 如果你想使用 pv 则必须设置成"filesystem"类型
    155. type: filesystem
    156. filesystem:
    157. rootdirectory: /storage
    158. #maxthreads: 100
    159. azure:
    160. accountname: accountname
    161. accountkey: base64encodedaccountkey
    162. container: containername
    163. #realm: core.windows.net
    164. gcs:
    165. bucket: bucketname
    166. # The base64 encoded json file which contains the key
    167. encodedkey: base64-encoded-json-key-file
    168. #rootdirectory: /gcs/object/name/prefix
    169. #chunksize: "5242880"
    170. s3:
    171. region: us-west-1
    172. bucket: bucketname
    173. #accesskey: awsaccesskey
    174. #secretkey: awssecretkey
    175. #regionendpoint: http://myobjects.local
    176. #encrypt: false
    177. #keyid: mykeyid
    178. #secure: true
    179. #skipverify: false
    180. #v4auth: true
    181. #chunksize: "5242880"
    182. #rootdirectory: /s3/object/name/prefix
    183. #storageclass: STANDARD
    184. #multipartcopychunksize: "33554432"
    185. #multipartcopymaxconcurrency: 100
    186. #multipartcopythresholdsize: "33554432"
    187. swift:
    188. authurl: https://storage.myprovider.com/v3/auth
    189. username: username
    190. password: password
    191. container: containername
    192. #region: fr
    193. #tenant: tenantname
    194. #tenantid: tenantid
    195. #domain: domainname
    196. #domainid: domainid
    197. #trustid: trustid
    198. #insecureskipverify: false
    199. #chunksize: 5M
    200. #prefix:
    201. #secretkey: secretkey
    202. #accesskey: accesskey
    203. #authversion: 3
    204. #endpointtype: public
    205. #tempurlcontainerkey: false
    206. #tempurlmethods:
    207. oss:
    208. accesskeyid: accesskeyid
    209. accesskeysecret: accesskeysecret
    210. region: regionname
    211. bucket: bucketname
    212. #endpoint: endpoint
    213. #internal: false
    214. #encrypt: false
    215. #secure: true
    216. #chunksize: 10M
    217. #rootdirectory: rootdirectory
    218. imagePullPolicy: IfNotPresent
    219. imagePullSecrets:
    220. # - name: docker-registry-secret
    221. # - name: internal-registry-secret
    222. # The update strategy for deployments with persistent volumes(jobservice, registry
    223. # and chartmuseum): "RollingUpdate" or "Recreate"
    224. # Set it as "Recreate" when "RWM" for volumes isn't supported
    225. updateStrategy:
    226. type: RollingUpdate
    227. logLevel: info
    228. # Harbor admin 初始密码,Harbor 启动后通过 Portal 修改该密码
    229. harborAdminPassword: "Harbor12345"
    230. caSecretName: ""
    231. # 用于加密的一个 secret key,必须是一个16位的字符串
    232. secretKey: "not-a-secure-key"
    233. proxy:
    234. httpProxy:
    235. httpsProxy:
    236. noProxy: 127.0.0.1,localhost,.local,.internal
    237. components:
    238. - core
    239. - jobservice
    240. - trivy
    241. # If expose the service via "ingress", the Nginx will not be used
    242. # 如果你通过"ingress"保留服务,则下面的Nginx不会被使用
    243. nginx:
    244. image:
    245. repository: goharbor/nginx-photon
    246. tag: dev
    247. serviceAccountName: ""
    248. automountServiceAccountToken: false
    249. replicas: 1
    250. # resources:
    251. # requests:
    252. # memory: 256Mi
    253. # cpu: 100m
    254. nodeSelector: {}
    255. tolerations: []
    256. affinity: {}
    257. # 额外的 Deployment 的一些 annotations
    258. podAnnotations: {}
    259. priorityClassName:
    260. portal:
    261. image:
    262. repository: goharbor/harbor-portal
    263. tag: dev
    264. serviceAccountName: ""
    265. automountServiceAccountToken: false
    266. replicas: 1
    267. # resources:
    268. # requests:
    269. # memory: 256Mi
    270. # cpu: 100m
    271. nodeSelector: {}
    272. tolerations: []
    273. affinity: {}
    274. podAnnotations: {}
    275. priorityClassName:
    276. core:
    277. image:
    278. repository: goharbor/harbor-core
    279. tag: dev
    280. serviceAccountName: ""
    281. automountServiceAccountToken: false
    282. replicas: 1
    283. startupProbe:
    284. enabled: true
    285. initialDelaySeconds: 10
    286. # resources:
    287. # requests:
    288. # memory: 256Mi
    289. # cpu: 100m
    290. nodeSelector: {}
    291. tolerations: []
    292. affinity: {}
    293. podAnnotations: {}
    294. secret: ""
    295. secretName: ""
    296. xsrfKey: ""
    297. priorityClassName:
    298. jobservice:
    299. image:
    300. repository: goharbor/harbor-jobservice
    301. tag: dev
    302. replicas: 1
    303. serviceAccountName: ""
    304. automountServiceAccountToken: false
    305. maxJobWorkers: 10
    306. # jobs 的日志收集器:"file", "database" or "stdout"
    307. jobLoggers:
    308. - file
    309. # - database
    310. # - stdout
    311. # resources:
    312. # requests:
    313. # memory: 256Mi
    314. # cpu: 100m
    315. nodeSelector: {}
    316. tolerations: []
    317. affinity: {}
    318. podAnnotations: {}
    319. secret: ""
    320. priorityClassName:
    321. registry:
    322. serviceAccountName: ""
    323. automountServiceAccountToken: false
    324. registry:
    325. image:
    326. repository: goharbor/registry-photon
    327. tag: dev
    328. # resources:
    329. # requests:
    330. # memory: 256Mi
    331. # cpu: 100m
    332. controller:
    333. image:
    334. repository: goharbor/harbor-registryctl
    335. tag: dev
    336. # resources:
    337. # requests:
    338. # memory: 256Mi
    339. # cpu: 100m
    340. replicas: 1
    341. nodeSelector: {}
    342. tolerations: []
    343. affinity: {}
    344. podAnnotations: {}
    345. priorityClassName:
    346. secret: ""
    347. relativeurls: false
    348. credentials:
    349. username: "harbor_registry_user"
    350. password: "harbor_registry_password"
    351. # e.g. "htpasswd -nbBC10 $username $password"
    352. htpasswd: "harbor_registry_user:$2y$10$9L4Tc0DJbFFMB6RdSCunrOpTHdwhid4ktBJmLD00bYgqkkGOvll3m"
    353. middleware:
    354. enabled: false
    355. type: cloudFront
    356. cloudFront:
    357. baseurl: example.cloudfront.net
    358. keypairid: KEYPAIRID
    359. duration: 3000s
    360. ipfilteredby: none
    361. privateKeySecret: "my-secret"
    362. chartmuseum:
    363. enabled: true
    364. serviceAccountName: ""
    365. automountServiceAccountToken: false
    366. absoluteUrl: false
    367. image:
    368. repository: goharbor/chartmuseum-photon
    369. tag: dev
    370. replicas: 1
    371. # resources:
    372. # requests:
    373. # memory: 256Mi
    374. # cpu: 100m
    375. nodeSelector: {}
    376. tolerations: []
    377. affinity: {}
    378. podAnnotations: {}
    379. priorityClassName:
    380. trivy:
    381. enabled: true
    382. image:
    383. repository: goharbor/trivy-adapter-photon
    384. tag: dev
    385. serviceAccountName: ""
    386. automountServiceAccountToken: false
    387. replicas: 1
    388. debugMode: false
    389. vulnType: "os,library"
    390. severity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL"
    391. ignoreUnfixed: false
    392. insecure: false
    393. gitHubToken: ""
    394. skipUpdate: false
    395. resources:
    396. requests:
    397. cpu: 200m
    398. memory: 512Mi
    399. limits:
    400. cpu: 1
    401. memory: 1Gi
    402. nodeSelector: {}
    403. tolerations: []
    404. affinity: {}
    405. podAnnotations: {}
    406. priorityClassName:
    407. notary:
    408. enabled: true
    409. server:
    410. serviceAccountName: ""
    411. automountServiceAccountToken: false
    412. image:
    413. repository: goharbor/notary-server-photon
    414. tag: dev
    415. replicas: 1
    416. # resources:
    417. # requests:
    418. # memory: 256Mi
    419. # cpu: 100m
    420. nodeSelector: {}
    421. tolerations: []
    422. affinity: {}
    423. podAnnotations: {}
    424. priorityClassName:
    425. signer:
    426. serviceAccountName: ""
    427. automountServiceAccountToken: false
    428. image:
    429. repository: goharbor/notary-signer-photon
    430. tag: dev
    431. replicas: 1
    432. # resources:
    433. # requests:
    434. # memory: 256Mi
    435. # cpu: 100m
    436. nodeSelector: {}
    437. tolerations: []
    438. affinity: {}
    439. podAnnotations: {}
    440. priorityClassName:
    441. secretName: ""
    442. database:
    443. # 如果使用外部的数据库,则设置 type=external,然后填写 external 区域的一些连接信息
    444. type: internal
    445. internal:
    446. serviceAccountName: ""
    447. automountServiceAccountToken: false
    448. image:
    449. repository: goharbor/harbor-db
    450. tag: dev
    451. # 内部的数据库的初始化超级用户的密码
    452. password: "changeit"
    453. shmSizeLimit: 512Mi
    454. # resources:
    455. # requests:
    456. # memory: 256Mi
    457. # cpu: 100m
    458. nodeSelector: {}
    459. tolerations: []
    460. affinity: {}
    461. priorityClassName:
    462. initContainer:
    463. migrator: {}
    464. # resources:
    465. # requests:
    466. # memory: 128Mi
    467. # cpu: 100m
    468. permissions: {}
    469. # resources:
    470. # requests:
    471. # memory: 128Mi
    472. # cpu: 100m
    473. external:
    474. host: "192.168.0.1"
    475. port: "5432"
    476. username: "user"
    477. password: "password"
    478. coreDatabase: "registry"
    479. notaryServerDatabase: "notary_server"
    480. notarySignerDatabase: "notary_signer"
    481. sslmode: "disable"
    482. maxIdleConns: 100
    483. maxOpenConns: 900
    484. podAnnotations: {}
    485. redis:
    486. # 如果使用外部的 Redis 服务,设置 type=external,然后补充 external 部分的连接信息。
    487. type: internal
    488. internal:
    489. serviceAccountName: ""
    490. automountServiceAccountToken: false
    491. image:
    492. repository: goharbor/redis-photon
    493. tag: dev
    494. # resources:
    495. # requests:
    496. # memory: 256Mi
    497. # cpu: 100m
    498. nodeSelector: {}
    499. tolerations: []
    500. affinity: {}
    501. priorityClassName:
    502. external:
    503. addr: "192.168.0.2:6379"
    504. sentinelMasterSet: ""
    505. # coreDatabaseIndex 必须设置为0
    506. coreDatabaseIndex: "0"
    507. jobserviceDatabaseIndex: "1"
    508. registryDatabaseIndex: "2"
    509. chartmuseumDatabaseIndex: "3"
    510. trivyAdapterIndex: "5"
    511. password: ""
    512. podAnnotations: {}
    513. exporter:
    514. replicas: 1
    515. # resources:
    516. # requests:
    517. # memory: 256Mi
    518. # cpu: 100m
    519. podAnnotations: {}
    520. serviceAccountName: ""
    521. automountServiceAccountToken: false
    522. image:
    523. repository: goharbor/harbor-exporter
    524. tag: dev
    525. nodeSelector: {}
    526. tolerations: []
    527. affinity: {}
    528. cacheDuration: 23
    529. cacheCleanInterval: 14400
    530. priorityClassName:
    531. metrics:
    532. enabled: false
    533. core:
    534. path: /metrics
    535. port: 8001
    536. registry:
    537. path: /metrics
    538. port: 8001
    539. jobservice:
    540. path: /metrics
    541. port: 8001
    542. exporter:
    543. path: /metrics
    544. port: 8001
    545. serviceMonitor:
    546. enabled: false
    547. additionalLabels: {}
    548. interval: ""
    549. metricRelabelings: []
    550. # - action: keep
    551. # regex: 'kube_(daemonset|deployment|pod|namespace|node|statefulset).+'
    552. # sourceLabels: [__name__]
    553. # Relabel configs to apply to samples before ingestion.
    554. relabelings: []
    555. # - sourceLabels: [__meta_kubernetes_pod_node_name]
    556. # separator: ;
    557. # regex: ^(.*)$
    558. # targetLabel: nodename
    559. # replacement: $1
    560. # action: replace
    1. expose:
    2. # Set the way how to expose the service. Set the type as "ingress",
    3. # "clusterIP", "nodePort" or "loadBalancer" and fill the information
    4. # in the corresponding section
    5. type: ingress
    6. tls:
    7. # Enable the tls or not. Note: if the type is "ingress" and the tls
    8. # is disabled, the port must be included in the command when pull/push
    9. # images. Refer to https://github.com/goharbor/harbor/issues/5291
    10. # for the detail.
    11. enabled: true
    12. # Fill the name of secret if you want to use your own TLS certificate.
    13. # The secret contains keys named:
    14. # "tls.crt" - the certificate (required)
    15. # "tls.key" - the private key (required)
    16. # "ca.crt" - the certificate of CA (optional), this enables the download
    17. # link on portal to download the certificate of CA
    18. # These files will be generated automatically if the "secretName" is not set
    19. secretName: ""
    20. # By default, the Notary service will use the same cert and key as
    21. # described above. Fill the name of secret if you want to use a
    22. # separated one. Only needed when the type is "ingress".
    23. notarySecretName: ""
    24. # The common name used to generate the certificate, it's necessary
    25. # when the type isn't "ingress" and "secretName" is null
    26. commonName: ""
    27. ingress:
    28. hosts:
    29. core: core.harbor.domain
    30. notary: notary.harbor.domain
    31. # set to the type of ingress controller if it has specific requirements.
    32. # leave as `default` for most ingress controllers.
    33. # set to `gce` if using the GCE ingress controller
    34. # set to `ncp` if using the NCP (NSX-T Container Plugin) ingress controller
    35. controller: default
    36. annotations:
    37. ingress.kubernetes.io/ssl-redirect: "true"
    38. ingress.kubernetes.io/proxy-body-size: "0"
    39. nginx.ingress.kubernetes.io/ssl-redirect: "true"
    40. nginx.ingress.kubernetes.io/proxy-body-size: "0"
    41. clusterIP:
    42. # The name of ClusterIP service
    43. name: harbor
    44. ports:
    45. # The service port Harbor listens on when serving with HTTP
    46. httpPort: 80
    47. # The service port Harbor listens on when serving with HTTPS
    48. httpsPort: 443
    49. # The service port Notary listens on. Only needed when notary.enabled
    50. # is set to true
    51. notaryPort: 4443
    52. nodePort:
    53. # The name of NodePort service
    54. name: harbor
    55. ports:
    56. http:
    57. # The service port Harbor listens on when serving with HTTP
    58. port: 80
    59. # The node port Harbor listens on when serving with HTTP
    60. nodePort: 30002
    61. https:
    62. # The service port Harbor listens on when serving with HTTPS
    63. port: 443
    64. # The node port Harbor listens on when serving with HTTPS
    65. nodePort: 30003
    66. # Only needed when notary.enabled is set to true
    67. notary:
    68. # The service port Notary listens on
    69. port: 4443
    70. # The node port Notary listens on
    71. nodePort: 30004
    72. loadBalancer:
    73. # The name of LoadBalancer service
    74. name: harbor
    75. # Set the IP if the LoadBalancer supports assigning IP
    76. IP: ""
    77. ports:
    78. # The service port Harbor listens on when serving with HTTP
    79. httpPort: 80
    80. # The service port Harbor listens on when serving with HTTPS
    81. httpsPort: 443
    82. # The service port Notary listens on. Only needed when notary.enabled
    83. # is set to true
    84. notaryPort: 4443
    85. annotations: {}
    86. sourceRanges: []
    87. # The external URL for Harbor core service. It is used to
    88. # 1) populate the docker/helm commands showed on portal
    89. # 2) populate the token service URL returned to docker/notary client
    90. #
    91. # Format: protocol://domain[:port]. Usually:
    92. # 1) if "expose.type" is "ingress", the "domain" should be
    93. # the value of "expose.ingress.hosts.core"
    94. # 2) if "expose.type" is "clusterIP", the "domain" should be
    95. # the value of "expose.clusterIP.name"
    96. # 3) if "expose.type" is "nodePort", the "domain" should be
    97. # the IP address of k8s node
    98. #
    99. # If Harbor is deployed behind the proxy, set it as the URL of proxy
    100. externalURL: https://core.harbor.domain
    101. # The internal TLS used for harbor components secure communicating. In order to enable https
    102. # in each components tls cert files need to provided in advance.
    103. internalTLS:
    104. # If internal TLS enabled
    105. enabled: false
    106. # There are three ways to provide tls
    107. # 1) "auto" will generate cert automatically
    108. # 2) "manual" need provide cert file manually in following value
    109. # 3) "secret" internal certificates from secret
    110. certSource: "auto"
    111. # The content of trust ca, only available when `certSource` is "manual"
    112. trustCa: ""
    113. # core related cert configuration
    114. core:
    115. # secret name for core's tls certs
    116. secretName: ""
    117. # Content of core's TLS cert file, only available when `certSource` is "manual"
    118. crt: ""
    119. # Content of core's TLS key file, only available when `certSource` is "manual"
    120. key: ""
    121. # jobservice related cert configuration
    122. jobservice:
    123. # secret name for jobservice's tls certs
    124. secretName: ""
    125. # Content of jobservice's TLS key file, only available when `certSource` is "manual"
    126. crt: ""
    127. # Content of jobservice's TLS key file, only available when `certSource` is "manual"
    128. key: ""
    129. # registry related cert configuration
    130. registry:
    131. # secret name for registry's tls certs
    132. secretName: ""
    133. # Content of registry's TLS key file, only available when `certSource` is "manual"
    134. crt: ""
    135. # Content of registry's TLS key file, only available when `certSource` is "manual"
    136. key: ""
    137. # portal related cert configuration
    138. portal:
    139. # secret name for portal's tls certs
    140. secretName: ""
    141. # Content of portal's TLS key file, only available when `certSource` is "manual"
    142. crt: ""
    143. # Content of portal's TLS key file, only available when `certSource` is "manual"
    144. key: ""
    145. # chartmuseum related cert configuration
    146. chartmuseum:
    147. # secret name for chartmuseum's tls certs
    148. secretName: ""
    149. # Content of chartmuseum's TLS key file, only available when `certSource` is "manual"
    150. crt: ""
    151. # Content of chartmuseum's TLS key file, only available when `certSource` is "manual"
    152. key: ""
    153. # clair related cert configuration
    154. clair:
    155. # secret name for clair's tls certs
    156. secretName: ""
    157. # Content of clair's TLS key file, only available when `certSource` is "manual"
    158. crt: ""
    159. # Content of clair's TLS key file, only available when `certSource` is "manual"
    160. key: ""
    161. # trivy related cert configuration
    162. trivy:
    163. # secret name for trivy's tls certs
    164. secretName: ""
    165. # Content of trivy's TLS key file, only available when `certSource` is "manual"
    166. crt: ""
    167. # Content of trivy's TLS key file, only available when `certSource` is "manual"
    168. key: ""
    169. # The persistence is enabled by default and a default StorageClass
    170. # is needed in the k8s cluster to provision volumes dynamicly.
    171. # Specify another StorageClass in the "storageClass" or set "existingClaim"
    172. # if you have already existing persistent volumes to use
    173. #
    174. # For storing images and charts, you can also use "azure", "gcs", "s3",
    175. # "swift" or "oss". Set it in the "imageChartStorage" section
    176. persistence:
    177. enabled: true
    178. # Setting it to "keep" to avoid removing PVCs during a helm delete
    179. # operation. Leaving it empty will delete PVCs after the chart deleted
    180. resourcePolicy: "keep"
    181. persistentVolumeClaim:
    182. registry:
    183. # Use the existing PVC which must be created manually before bound,
    184. # and specify the "subPath" if the PVC is shared with other components
    185. existingClaim: ""
    186. # Specify the "storageClass" used to provision the volume. Or the default
    187. # StorageClass will be used(the default).
    188. # Set it to "-" to disable dynamic provisioning
    189. storageClass: ""
    190. subPath: ""
    191. accessMode: ReadWriteOnce
    192. size: 5Gi
    193. chartmuseum:
    194. existingClaim: ""
    195. storageClass: ""
    196. subPath: ""
    197. accessMode: ReadWriteOnce
    198. size: 5Gi
    199. jobservice:
    200. existingClaim: ""
    201. storageClass: ""
    202. subPath: ""
    203. accessMode: ReadWriteOnce
    204. size: 1Gi
    205. # If external database is used, the following settings for database will
    206. # be ignored
    207. database:
    208. existingClaim: ""
    209. storageClass: ""
    210. subPath: ""
    211. accessMode: ReadWriteOnce
    212. size: 1Gi
    213. # If external Redis is used, the following settings for Redis will
    214. # be ignored
    215. redis:
    216. existingClaim: ""
    217. storageClass: ""
    218. subPath: ""
    219. accessMode: ReadWriteOnce
    220. size: 1Gi
    221. trivy:
    222. existingClaim: ""
    223. storageClass: ""
    224. subPath: ""
    225. accessMode: ReadWriteOnce
    226. size: 5Gi
    227. # Define which storage backend is used for registry and chartmuseum to store
    228. # images and charts. Refer to
    229. # https://github.com/docker/distribution/blob/master/docs/configuration.md#storage
    230. # for the detail.
    231. imageChartStorage:
    232. # Specify whether to disable `redirect` for images and chart storage, for
    233. # backends which not supported it (such as using minio for `s3` storage type), please disable
    234. # it. To disable redirects, simply set `disableredirect` to `true` instead.
    235. # Refer to
    236. # https://github.com/docker/distribution/blob/master/docs/configuration.md#redirect
    237. # for the detail.
    238. disableredirect: false
    239. # Specify the "caBundleSecretName" if the storage service uses a self-signed certificate.
    240. # The secret must contain keys named "ca.crt" which will be injected into the trust store
    241. # of registry's and chartmuseum's containers.
    242. # caBundleSecretName:
    243. # Specify the type of storage: "filesystem", "azure", "gcs", "s3", "swift",
    244. # "oss" and fill the information needed in the corresponding section. The type
    245. # must be "filesystem" if you want to use persistent volumes for registry
    246. # and chartmuseum
    247. type: filesystem
    248. filesystem:
    249. rootdirectory: /storage
    250. #maxthreads: 100
    251. azure:
    252. accountname: accountname
    253. accountkey: base64encodedaccountkey
    254. container: containername
    255. #realm: core.windows.net
    256. gcs:
    257. bucket: bucketname
    258. # The base64 encoded json file which contains the key
    259. encodedkey: base64-encoded-json-key-file
    260. #rootdirectory: /gcs/object/name/prefix
    261. #chunksize: "5242880"
    262. s3:
    263. region: us-west-1
    264. bucket: bucketname
    265. #accesskey: awsaccesskey
    266. #secretkey: awssecretkey
    267. #regionendpoint: http://myobjects.local
    268. #encrypt: false
    269. #keyid: mykeyid
    270. #secure: true
    271. #v4auth: true
    272. #chunksize: "5242880"
    273. #rootdirectory: /s3/object/name/prefix
    274. #storageclass: STANDARD
    275. swift:
    276. authurl: https://storage.myprovider.com/v3/auth
    277. username: username
    278. password: password
    279. container: containername
    280. #region: fr
    281. #tenant: tenantname
    282. #tenantid: tenantid
    283. #domain: domainname
    284. #domainid: domainid
    285. #trustid: trustid
    286. #insecureskipverify: false
    287. #chunksize: 5M
    288. #prefix:
    289. #secretkey: secretkey
    290. #accesskey: accesskey
    291. #authversion: 3
    292. #endpointtype: public
    293. #tempurlcontainerkey: false
    294. #tempurlmethods:
    295. oss:
    296. accesskeyid: accesskeyid
    297. accesskeysecret: accesskeysecret
    298. region: regionname
    299. bucket: bucketname
    300. #endpoint: endpoint
    301. #internal: false
    302. #encrypt: false
    303. #secure: true
    304. #chunksize: 10M
    305. #rootdirectory: rootdirectory
    306. imagePullPolicy: IfNotPresent
    307. # Use this set to assign a list of default pullSecrets
    308. imagePullSecrets:
    309. # - name: docker-registry-secret
    310. # - name: internal-registry-secret
    311. # The update strategy for deployments with persistent volumes(jobservice, registry
    312. # and chartmuseum): "RollingUpdate" or "Recreate"
    313. # Set it as "Recreate" when "RWM" for volumes isn't supported
    314. updateStrategy:
    315. type: RollingUpdate
    316. # debug, info, warning, error or fatal
    317. logLevel: info
    318. # The initial password of Harbor admin. Change it from portal after launching Harbor
    319. harborAdminPassword: "Harbor12345"
    320. # The secret key used for encryption. Must be a string of 16 chars.
    321. secretKey: "not-a-secure-key"
    322. # The proxy settings for updating clair vulnerabilities from the Internet and replicating
    323. # artifacts from/to the registries that cannot be reached directly
    324. proxy:
    325. httpProxy:
    326. httpsProxy:
    327. noProxy: 127.0.0.1,localhost,.local,.internal
    328. components:
    329. - core
    330. - jobservice
    331. - clair
    332. ## UAA Authentication Options
    333. # If you're using UAA for authentication behind a self-signed
    334. # certificate you will need to provide the CA Cert.
    335. # Set uaaSecretName below to provide a pre-created secret that
    336. # contains a base64 encoded CA Certificate named `ca.crt`.
    337. # uaaSecretName:
    338. # If expose the service via "ingress", the Nginx will not be used
    339. nginx:
    340. image:
    341. repository: goharbor/nginx-photon
    342. tag: v2.0.0
    343. replicas: 1
    344. # resources:
    345. # requests:
    346. # memory: 256Mi
    347. # cpu: 100m
    348. nodeSelector: {}
    349. tolerations: []
    350. affinity: {}
    351. ## Additional deployment annotations
    352. podAnnotations: {}
    353. portal:
    354. image:
    355. repository: goharbor/harbor-portal
    356. tag: v2.0.0
    357. replicas: 1
    358. # resources:
    359. # requests:
    360. # memory: 256Mi
    361. # cpu: 100m
    362. nodeSelector: {}
    363. tolerations: []
    364. affinity: {}
    365. ## Additional deployment annotations
    366. podAnnotations: {}
    367. core:
    368. image:
    369. repository: goharbor/harbor-core
    370. tag: v2.0.0
    371. replicas: 1
    372. ## Liveness probe values
    373. livenessProbe:
    374. initialDelaySeconds: 300
    375. # resources:
    376. # requests:
    377. # memory: 256Mi
    378. # cpu: 100m
    379. nodeSelector: {}
    380. tolerations: []
    381. affinity: {}
    382. ## Additional deployment annotations
    383. podAnnotations: {}
    384. # Secret is used when core server communicates with other components.
    385. # If a secret key is not specified, Helm will generate one.
    386. # Must be a string of 16 chars.
    387. secret: ""
    388. # Fill the name of a kubernetes secret if you want to use your own
    389. # TLS certificate and private key for token encryption/decryption.
    390. # The secret must contain keys named:
    391. # "tls.crt" - the certificate
    392. # "tls.key" - the private key
    393. # The default key pair will be used if it isn't set
    394. secretName: ""
    395. # The XSRF key. Will be generated automatically if it isn't specified
    396. xsrfKey: ""
    397. jobservice:
    398. image:
    399. repository: goharbor/harbor-jobservice
    400. tag: v2.0.0
    401. replicas: 1
    402. maxJobWorkers: 10
    403. # The logger for jobs: "file", "database" or "stdout"
    404. jobLogger: file
    405. # resources:
    406. # requests:
    407. # memory: 256Mi
    408. # cpu: 100m
    409. nodeSelector: {}
    410. tolerations: []
    411. affinity: {}
    412. ## Additional deployment annotations
    413. podAnnotations: {}
    414. # Secret is used when job service communicates with other components.
    415. # If a secret key is not specified, Helm will generate one.
    416. # Must be a string of 16 chars.
    417. secret: ""
    418. registry:
    419. registry:
    420. image:
    421. repository: goharbor/registry-photon
    422. tag: v2.0.0
    423. # resources:
    424. # requests:
    425. # memory: 256Mi
    426. # cpu: 100m
    427. controller:
    428. image:
    429. repository: goharbor/harbor-registryctl
    430. tag: v2.0.0
    431. # resources:
    432. # requests:
    433. # memory: 256Mi
    434. # cpu: 100m
    435. replicas: 1
    436. nodeSelector: {}
    437. tolerations: []
    438. affinity: {}
    439. ## Additional deployment annotations
    440. podAnnotations: {}
    441. # Secret is used to secure the upload state from client
    442. # and registry storage backend.
    443. # See: https://github.com/docker/distribution/blob/master/docs/configuration.md#http
    444. # If a secret key is not specified, Helm will generate one.
    445. # Must be a string of 16 chars.
    446. secret: ""
    447. # If true, the registry returns relative URLs in Location headers. The client is responsible for resolving the correct URL.
    448. relativeurls: false
    449. credentials:
    450. username: "harbor_registry_user"
    451. password: "harbor_registry_password"
    452. # If you update the username or password of registry, make sure use cli tool htpasswd to generate the bcrypt hash
    453. # e.g. "htpasswd -nbBC10 $username $password"
    454. htpasswd: "harbor_registry_user:$2y$10$9L4Tc0DJbFFMB6RdSCunrOpTHdwhid4ktBJmLD00bYgqkkGOvll3m"
    455. middleware:
    456. enabled: false
    457. type: cloudFront
    458. cloudFront:
    459. baseurl: example.cloudfront.net
    460. keypairid: KEYPAIRID
    461. duration: 3000s
    462. ipfilteredby: none
    463. # The secret key that should be present is CLOUDFRONT_KEY_DATA, which should be the encoded private key
    464. # that allows access to CloudFront
    465. privateKeySecret: "my-secret"
    466. chartmuseum:
    467. enabled: true
    468. # Harbor defaults ChartMuseum to returning relative urls, if you want using absolute url you should enable it by change the following value to 'true'
    469. absoluteUrl: false
    470. image:
    471. repository: goharbor/chartmuseum-photon
    472. tag: v2.0.0
    473. replicas: 1
    474. # resources:
    475. # requests:
    476. # memory: 256Mi
    477. # cpu: 100m
    478. nodeSelector: {}
    479. tolerations: []
    480. affinity: {}
    481. ## Additional deployment annotations
    482. podAnnotations: {}
    483. clair:
    484. enabled: true
    485. clair:
    486. image:
    487. repository: goharbor/clair-photon
    488. tag: v2.0.0
    489. # resources:
    490. # requests:
    491. # memory: 256Mi
    492. # cpu: 100m
    493. adapter:
    494. image:
    495. repository: goharbor/clair-adapter-photon
    496. tag: v2.0.0
    497. # resources:
    498. # requests:
    499. # memory: 256Mi
    500. # cpu: 100m
    501. replicas: 1
    502. # The interval of clair updaters, the unit is hour, set to 0 to
    503. # disable the updaters
    504. updatersInterval: 12
    505. nodeSelector: {}
    506. tolerations: []
    507. affinity: {}
    508. ## Additional deployment annotations
    509. podAnnotations: {}
    510. trivy:
    511. # enabled the flag to enable Trivy scanner
    512. enabled: true
    513. image:
    514. # repository the repository for Trivy adapter image
    515. repository: goharbor/trivy-adapter-photon
    516. # tag the tag for Trivy adapter image
    517. tag: v2.0.0
    518. # replicas the number of Pod replicas
    519. replicas: 1
    520. # debugMode the flag to enable Trivy debug mode with more verbose scanning log
    521. debugMode: false
    522. # vulnType a comma-separated list of vulnerability types. Possible values are `os` and `library`.
    523. vulnType: "os,library"
    524. # severity a comma-separated list of severities to be checked
    525. severity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL"
    526. # ignoreUnfixed the flag to display only fixed vulnerabilities
    527. ignoreUnfixed: false
    528. # insecure the flag to skip verifying registry certificate
    529. insecure: false
    530. # gitHubToken the GitHub access token to download Trivy DB
    531. #
    532. # Trivy DB contains vulnerability information from NVD, Red Hat, and many other upstream vulnerability databases.
    533. # It is downloaded by Trivy from the GitHub release page https://github.com/aquasecurity/trivy-db/releases and cached
    534. # in the local file system (`/home/scanner/.cache/trivy/db/trivy.db`). In addition, the database contains the update
    535. # timestamp so Trivy can detect whether it should download a newer version from the Internet or use the cached one.
    536. # Currently, the database is updated every 12 hours and published as a new release to GitHub.
    537. #
    538. # Anonymous downloads from GitHub are subject to the limit of 60 requests per hour. Normally such rate limit is enough
    539. # for production operations. If, for any reason, it's not enough, you could increase the rate limit to 5000
    540. # requests per hour by specifying the GitHub access token. For more details on GitHub rate limiting please consult
    541. # https://developer.github.com/v3/#rate-limiting
    542. #
    543. # You can create a GitHub token by following the instructions in
    544. # https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
    545. gitHubToken: ""
    546. # skipUpdate the flag to disable Trivy DB downloads from GitHub
    547. #
    548. # You might want to set the value of this flag to `true` in test or CI/CD environments to avoid GitHub rate limiting issues.
    549. # If the value is set to `true` you have to manually download the `trivy.db` file and mount it in the
    550. # `/home/scanner/.cache/trivy/db/trivy.db` path.
    551. skipUpdate: false
    552. resources:
    553. requests:
    554. cpu: 200m
    555. memory: 512Mi
    556. limits:
    557. cpu: 1
    558. memory: 1Gi
    559. ## Additional deployment annotations
    560. podAnnotations: {}
    561. notary:
    562. enabled: true
    563. server:
    564. image:
    565. repository: goharbor/notary-server-photon
    566. tag: v2.0.0
    567. replicas: 1
    568. # resources:
    569. # requests:
    570. # memory: 256Mi
    571. # cpu: 100m
    572. signer:
    573. image:
    574. repository: goharbor/notary-signer-photon
    575. tag: v2.0.0
    576. replicas: 1
    577. # resources:
    578. # requests:
    579. # memory: 256Mi
    580. # cpu: 100m
    581. nodeSelector: {}
    582. tolerations: []
    583. affinity: {}
    584. ## Additional deployment annotations
    585. podAnnotations: {}
    586. # Fill the name of a kubernetes secret if you want to use your own
    587. # TLS certificate authority, certificate and private key for notary
    588. # communications.
    589. # The secret must contain keys named ca.crt, tls.crt and tls.key that
    590. # contain the CA, certificate and private key.
    591. # They will be generated if not set.
    592. secretName: ""
    593. database:
    594. # if external database is used, set "type" to "external"
    595. # and fill the connection informations in "external" section
    596. type: internal
    597. internal:
    598. image:
    599. repository: goharbor/harbor-db
    600. tag: v2.0.0
    601. # the image used by the init container
    602. initContainerImage:
    603. repository: busybox
    604. tag: latest
    605. # The initial superuser password for internal database
    606. password: "changeit"
    607. # resources:
    608. # requests:
    609. # memory: 256Mi
    610. # cpu: 100m
    611. nodeSelector: {}
    612. tolerations: []
    613. affinity: {}
    614. external:
    615. host: "192.168.0.1"
    616. port: "5432"
    617. username: "user"
    618. password: "password"
    619. coreDatabase: "registry"
    620. clairDatabase: "clair"
    621. notaryServerDatabase: "notary_server"
    622. notarySignerDatabase: "notary_signer"
    623. # "disable" - No SSL
    624. # "require" - Always SSL (skip verification)
    625. # "verify-ca" - Always SSL (verify that the certificate presented by the
    626. # server was signed by a trusted CA)
    627. # "verify-full" - Always SSL (verify that the certification presented by the
    628. # server was signed by a trusted CA and the server host name matches the one
    629. # in the certificate)
    630. sslmode: "disable"
    631. # The maximum number of connections in the idle connection pool.
    632. # If it <=0, no idle connections are retained.
    633. maxIdleConns: 50
    634. # The maximum number of open connections to the database.
    635. # If it <= 0, then there is no limit on the number of open connections.
    636. # Note: the default number of connections is 100 for postgre.
    637. maxOpenConns: 100
    638. ## Additional deployment annotations
    639. podAnnotations: {}
    640. redis:
    641. # if external Redis is used, set "type" to "external"
    642. # and fill the connection informations in "external" section
    643. type: internal
    644. internal:
    645. image:
    646. repository: goharbor/redis-photon
    647. tag: v2.0.0
    648. # resources:
    649. # requests:
    650. # memory: 256Mi
    651. # cpu: 100m
    652. nodeSelector: {}
    653. tolerations: []
    654. affinity: {}
    655. external:
    656. host: "192.168.0.2"
    657. port: "6379"
    658. # The "coreDatabaseIndex" must be "0" as the library Harbor
    659. # used doesn't support configuring it
    660. coreDatabaseIndex: "0"
    661. jobserviceDatabaseIndex: "1"
    662. registryDatabaseIndex: "2"
    663. chartmuseumDatabaseIndex: "3"
    664. clairAdapterIndex: "4"
    665. trivyAdapterIndex: "5"
    666. password: ""
    667. ## Additional deployment annotations
    668. podAnnotations: {}
    1. [root@UR-20210425NAMA ~]# helm -n infrastructure-prod list
    2. NAME NAMESPACE REVISION UPDATED STATUS CHART
    3. APP VERSION
    4. harbor-prod infrastructure-prod 1 2022-08-04 09:16:33.411526559 +0800 CST deployed harbor-1.4.1 2.0.1

    pod

    1. harbor-prod-harbor-chartmuseum-747ccfd78c-48p55 1/1 Running 0 14m
    2. harbor-prod-harbor-clair-5cfd8967f5-dp4tk 2/2 Running 5 14m
    3. harbor-prod-harbor-core-854ff95b5b-jg6d9 1/1 Running 3 14m
    4. harbor-prod-harbor-database-0 1/1 Running 0 14m
    5. harbor-prod-harbor-jobservice-6f84f94ff6-lxsxn 1/1 Running 1 14m
    6. harbor-prod-harbor-notary-server-556cb84bbc-6v8xh 1/1 Running 5 14m
    7. harbor-prod-harbor-notary-signer-b867684d7-mks64 1/1 Running 5 14m
    8. harbor-prod-harbor-portal-8459fc6fc4-mp49p 1/1 Running 0 14m
    9. harbor-prod-harbor-redis-0 1/1 Running 0 14m
    10. harbor-prod-harbor-registry-b494944f-rrm7s 2/2 Running 0 14m
    11. harbor-prod-harbor-trivy-0 1/1 Running 0 15m

    deployments

    1. deployment-rocketmq-console-ng-prod 1/1 1 1 112d
    2. harbor-prod-harbor-chartmuseum 1/1 1 1 17m
    3. harbor-prod-harbor-clair 1/1 1 1 17m
    4. harbor-prod-harbor-core 1/1 1 1 17m
    5. harbor-prod-harbor-jobservice 1/1 1 1 17m
    6. harbor-prod-harbor-notary-server 1/1 1 1 17m
    7. harbor-prod-harbor-notary-signer 1/1 1 1 17m
    8. harbor-prod-harbor-portal 1/1 1 1 17m
    9. harbor-prod-harbor-registry 1/1 1 1 17m

    statefulsets

    1. harbor-prod-harbor-database 1/1 18m
    2. harbor-prod-harbor-redis 1/1 18m
    3. harbor-prod-harbor-trivy 1/1 18m

    service

    1. [root@UR-20210425NAMA ~]# kubectl -n infrastructure-prod get service |grep harbor
    2. harbor-prod-harbor-chartmuseum ClusterIP 172.30.253.78 <none> 80/TCP 24m
    3. harbor-prod-harbor-clair ClusterIP 172.30.197.27 <none> 8080/TCP 24m
    4. harbor-prod-harbor-core ClusterIP 172.30.195.235 <none> 80/TCP 24m
    5. harbor-prod-harbor-database ClusterIP 172.30.172.22 <none> 5432/TCP 24m
    6. harbor-prod-harbor-jobservice ClusterIP 172.30.181.47 <none> 80/TCP 24m
    7. harbor-prod-harbor-notary-server ClusterIP 172.30.130.14 <none> 4443/TCP 24m
    8. harbor-prod-harbor-notary-signer ClusterIP 172.30.200.67 <none> 7899/TCP 24m
    9. harbor-prod-harbor-portal ClusterIP 172.30.246.36 <none> 80/TCP 24m
    10. harbor-prod-harbor-redis ClusterIP 172.30.198.106 <none> 6379/TCP 24m
    11. harbor-prod-harbor-registry ClusterIP 172.30.152.60 <none> 5000/TCP,8080/TCP 24m
    12. harbor-prod-harbor-trivy ClusterIP 172.30.177.58 <none> 8080/TCP 24m
    13. [root@UR-20210425NAMA ~]#

    ingress

    1. [root@UR-20210425NAMA ~]# kubectl -n infrastructure-prod get ingress
    2. NAME CLASS HOSTS ADDRESS PORTS AGE
    3. harbor-prod-harbor-ingress <none> core.harbor.domain 80, 443 19m
    4. harbor-prod-harbor-ingress-notary <none> notary.harbor.domain 80, 443 19m

    pvc

    1. [root@UR-20210425NAMA ~]# kubectl -n infrastructure-prod get pvc |grep harbor
    2. data-harbor-prod-harbor-redis-0 Bound pvc-f6ba3c53-c077-4364-8c43-3e707e3be6e3 1Gi RWO sfsturbo-prod 22m
    3. data-harbor-prod-harbor-trivy-0 Bound pvc-e47a5ac1-5b5b-45b9-b7d2-496ee5e37145 5Gi RWO sfsturbo-prod 22m
    4. database-data-harbor-prod-harbor-database-0 Bound pvc-2ffabaae-59bf-44a9-9aaf-b2494d162162 1Gi RWO sfsturbo-prod 22m
    5. harbor-prod-harbor-chartmuseum Bound pvc-7e6258e2-e88b-4d70-a511-5ba4487caf10 5Gi RWO sfsturbo-prod 22m
    6. harbor-prod-harbor-jobservice Bound pvc-823931d4-16e3-4b01-86a7-8a8b0a149e8d 1Gi RWO sfsturbo-prod 22m
    7. harbor-prod-harbor-registry Bound pvc-96c1acdf-b6ee-4c2a-8668-e5ffffacdedd 5Gi RWO sfsturbo-prod 22m
    8. [root@UR-20210425NAMA ~]#