# vSphere with Tanzu 使用 embedded or external Harbor 方式 > [time= July, 2021] > https://sapphirelin.github.io/20210716-Tanzu-%E9%8F%A1%E5%83%8F%E5%80%89%E5%BA%AB%E6%86%91%E8%AD%89%E5%AE%89%E8%A3%9D%E6%B3%95/ 已經開始玩 Tanzu 一陣子的朋朋們,應該一直都有一個糾結是,embedded Harbor (內嵌式私倉) 一鍵啟用、很方便,但是不能隨意新增專案,只能跟著 namespace 創建、彈性不高;external Harbor (外接式私倉) 就能隨心所欲,但是就要把憑證一個一個丟進去每一台 cluster node 才行。 整理一下原本的步驟: > 1. 登進去SC 拿 secret 來 SSH 進去 TKG nodes ([最速登入 guest cluster node 方法](https://hackmd.io/1zXLry-aS1m80taMel0d9Q?view)) > 2. 拿 TKG cluster 的 kubeconfig 檔案 > 3. vsphere login 進去 TKC > 4. 拿到每個 TKG nodes 的 ip > 5. 丟憑證到每一個 TKG nodes 然後還要複製到每一台的憑證路徑 > 6. 每一台重開 docker ..^^ 別擔心,在 vSphere with Tanzu 7 U2 之後,可以透過客製化 Supervisor Cluster (SC) 的 `TkgServiceConfiguration` 這隻服務,讓塞憑證達到讓自動化: --- ### / 準備憑證 / 兩種方法 openssl or Harbor 本身的 UI 。 #### 第一種-用 openSSL 連線去拿: 1. 先去連我們的私倉 Harbor ``` $ openssl s_client -connect <harbor url>:443 ``` 2. 複製憑證區 ![](https://i.imgur.com/nB4a8e5.png) 3. 下 `echo '貼上上面複製的憑證' | base64 ` 如: ![](https://i.imgur.com/E8vPHMY.png) 4. 拿到囉!Harbor 私倉的憑證(下面反白的那段): ![](https://i.imgur.com/FePrQxG.jpg) ### 第二種- 到 harbor UI 的 project 裡面下載 (如圖): ![](https://i.imgur.com/O6osaYD.png) 打開檔案一樣後用上面第3步的 base64 加密就行~ --- ### / 開始 / #### 1. 登入 Supervisor Cluster (SC) ``` kubectl-vsphere login --vsphere-username user@domain.com --server=xxx.xxx.xxx.xxx ``` #### 2. 修改 `TkgServiceConfiguration` ``` kubectl edit TkgServiceConfiguration ``` 找不到的話就表示你進錯 context 囉!要去SC~ #### 3. 進編輯模式後,加入憑證 原本的模樣: ```yaml= apiVersion: run.tanzu.vmware.com/v1alpha1 kind: TkgServiceConfiguration metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"run.tanzu.vmware.com/v1alpha1","kind":"TkgServiceConfiguration","metadata":{"annotations":{},"name":"tkg-service-configuration"},"spec":{"defaultCNI":"antrea"}} creationTimestamp: "2021-07-01T16:30:35Z" generation: 1 name: tkg-service-configuration resourceVersion: "2948" selfLink: /apis/run.tanzu.vmware.com/v1alpha1/tkgserviceconfigurations/tkg-service-configuration uid: f01e03b4-6c6b-4e76-9c82-a2cf4d5f2b05 spec: defaultCNI: antrea ``` ![](https://i.imgur.com/I9WwqZL.png) 新增憑證後的模樣(15~18行): ```yaml= apiVersion: run.tanzu.vmware.com/v1alpha1 kind: TkgServiceConfiguration metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"run.tanzu.vmware.com/v1alpha1","kind":"TkgServiceConfiguration","metadata":{"annotations":{},"name":"tkg-service-configuration"},"spec":{"defaultCNI":"antrea"}} creationTimestamp: "2021-07-01T16:30:35Z" generation: 1 name: tkg-service-configuration resourceVersion: "2948" selfLink: /apis/run.tanzu.vmware.com/v1alpha1/tkgserviceconfigurations/tkg-service-configuration uid: f01e03b4-6c6b-4e76-9c82-a2cf4d5f2b05 spec: defaultCNI: antrea trust: additionalTrustedCAs: - name: harbor data: 貼上加密憑證 ``` ![](https://i.imgur.com/Qb8TrXd.jpg) #### 4. 結束啦!驗證成功與否 等待他更新後,用 [SSH去看既有的 tkc ](https://hackmd.io/1zXLry-aS1m80taMel0d9Q?view) 那幾台`/etc/ssl/certs/` 目錄下面有沒有「`tkg-harbor.pem` 」。 或是登入你的 harbor ,直接部署你有的 image 看看有沒有成功部署: ![](https://i.imgur.com/5d4jQAs.png) 。:.゚ヽ(*´∀`)ノ゚.:。 當然同樣的也可以用這種方式塞內嵌式Harbor。 以上就是讓整座 vSphere with Tanzu 都連到私倉的方式啦! 想看影片操作的可以參考 Kendrick 哥的示範: [Set Up a Harbor Registry with Self-Signed Certificates for Tanzu Kubernetes Clusters](https://www.youtube.com/watch?v=sqC9bP8gwQ0) --- ### / 常見 troubleshooting / #### -查看 pod status 分享一個簡單的除錯方式,部署後用 `kubectl get pod` 來進行檢查: ##### 1. 若 Status 為 ErrImagePull 併發症狀是" x509: certificate signed by unknown authority ",這就表示你憑證放錯或是沒有放進去,通常都是忘記 base64 加解密造成的,重新塞在 `TkgServiceConfiguration` 然後等待rolling update就好。 ##### 2. 若 Status 為 ImagePullBackOff 這基本上就是表示連得到,憑證也沒錯,但 authorization 出錯。 遇到這種 error 就是檢查 secret 有沒有塞錯,或是注意 docker login 要出現 login success ,以及像是用 docker Desktop UI 有沒打錯帳號密碼。 這部分感謝 Cormac Hogan 大大分享,溫馨無比 ( ´•̥̥̥ω•̥̥̥` ) #### -升級 vSphere 7U2 前作法 *非production作法 還沒升級至 vSphere 7U2 之前的環境,可以參考 Cormac 的文章塞憑證: [Integrating embedded vSphere with Kubernetes Harbor Registry with TKG (guest) clusters](https://cormachogan.com/2020/06/23/integrating-embedded-vsphere-with-kubernetes-harbor-registry-with-tkg-guest-clusters/) (*TKG guest cluster = vSphere with Tanzu’s TKC) 不過只有用本文的 TkgServiceConfiguration 自動化方式才能開 support ticket 除錯,所以不建議在生產環境使用!! (上述為本文時間點狀態,以官網設置手冊為準) 官網文檔: [Using Container Registry with Tanzu Kubernetes Clusters](https://docs.vmware.com/en/VMware-vSphere/7.0/vmware-vsphere-with-tanzu/GUID-376FCCD1-7743-4202-ACCA-56F214B6892F.html) --- 接著可能會遇到的延伸問題:我司需要個別組織有其專屬的 Harbor ,例如只能給某個R&D team 連上單獨的私倉的話怎麼辦?可以參考我另外一篇文章: [Tanzu k8s cluster 個別使用多個 Harbor 方式](https://hackmd.io/rUYyBYuKT6WRGc76gUtzUw) 至於自己的組織到底適合用 embedded or external Harbor 呢? it depends. 有預算的話推薦直接接洽 [專業服務團隊](https://www.vmware.com/tw/professional-services.html) ,從環境健康檢查到組織需求訪談、從 infra 到 ap 及文化和使用習慣,由架構師幫公司設計最符合企業的模式是最理想的。 Tschüss! (ノ>ω<)ノ ###### tags: `blog posted` `work hack` `VMware` `Tanzu` `harbor` `repository` `cert`