close

需求

原始的需求只是要在內部環境中架設 Nexus Repository 作 docker private repository 但是 預設要使用IP連線還要加上 port 真的是又臭又長。

所以才會想要設定  Nexus Repository 讓他可以使用 https ,減少 docker image 在tag時太長,字要打很多很累的困擾。

例如,原本的指令 docker tag myimg 172.16.3.100:8000/myimg , 設定完之後只要  docker tag myimg docker.local/myimg ,  可以少打很多字,果然科技來自於惰性。

想法

利用電腦名稱(這裡用docker.local 為例)取代ip ,而且因為docker client 預設是使用https 也就是443port 做為連線. 如果要儘量縮短網址讓 private repository 使用https連線是最好的做法.

其實也不一定要走https 就能達成目地, 只要在 docker client 修改 daemon.json,加上   "insecure-registries" : ["docker.local"] 然後讓內部用的repository 使用 80port的http 就可以了 。

但缺點就是,每個docker client都要去修改 daemon.json。

所以為了避免去注意到底daemon.json到了改了沒(說到底還是懶) ,使用https還是比較好的做法。

環境

到  https://www.sonatype.com/download-oss-sonatype下載最新版本 Nexus Repository OSS , 目前我是使用 3.16 的版本

步驟

以下步驟主要是參考 Nexus官方文件 https://help.sonatype.com/repomanager3/security/configuring-ssl#ConfiguringSSL-InboundSSL-ConfiguringtoServeContentviaHTTPS 

1.用 OpenSSL tool產生給要private repository使用的domain (以 docker.local 為例)憑証  ,產生出來的格式要pfx , 而且匯出時一定要有6個字以上的密碼 ,這裡假設 檔名叫docker.local.pfx, 密碼是123456

怎麼用OpenSSL產生憑証可以參考黑暗大的這篇 https://blog.darkthread.net/blog/iis-ssl-cert-by-openssl/

還有記得要把簽發SSL憑証的根憑証匯到 docker client [本機電腦]層級的[受信任的根憑証單位]裡 , 如果有AD的環境可以用群組原則物件(GPO)派發到每一台電腦參考 https://docs.microsoft.com/zh-tw/windows-server/identity/ad-fs/deployment/distribute-certificates-to-client-computers-by-using-group-policy

2.用 java sdk 附的keytool 將步驟 1 產出的憑証轉成 jks 格式,檔名叫keystore.jks

範例 "C:\Program Files\Java\jdk1.8.0_161\bin\keytool" -importkeystore -srckeystore docker.local.pfx -srcstoretype PKCS12 -srcstorepass 123456 -destkeystore keystore.jks -deststoretype jks -deststorepass 123456 

3.把keystore.jks放到 Nexus 的安裝目錄下的/etc/ssl/ 裡

4.修改安裝目錄下的/etc/nexus-default.properties

  加上 application-port-ssl=8443 (讓管理介面可以使用https port用 8443)
  把nexus-args= 那一行 變成 nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml,${jetty.etc}/jetty-requestlog.xml

5.修改安裝目錄下的/etc/jetty/jetty-https.xml

把<Set name="KeyStorePassword">123456</Set>
  <Set name="KeyManagerPassword">123456</Set>
  <Set name="TrustStorePassword">123456</Set>
  這3個值都改成憑証的密碼,這邊範例是123456

6.重啟nexus這個windows 服務(如果有把nexus變成windows 服務)

7.用https://docker.local:8443 如果有連上管理介面就表示有啟用成功

8.然後就可以到管理介面把內部用的repository , 使用https打勾 ,內容填上443

9.用browser 連 https://docker.local 有回應就表示設定成功

10.到docker client 使用login的指令測試是否有成功

docker login docker.local

如果出現詢問帳密 就表示設定成功

如果出現 [Get https://docker.local/v2/: x509: certificate signed by unknown authority]  表示沒有把docker.local.pfx 的根憑証, 匯入到[本機電腦]層級的[受信任的根憑証單位]裡

 

arrow
arrow
    文章標籤
    docker Nexus Repository OSS
    全站熱搜
    創作者介紹
    創作者 丫烈客 的頭像
    丫烈客

    丫烈客

    丫烈客 發表在 痞客邦 留言(0) 人氣()