Harbor 無法下載鏡像的一個原因

問題描述

無法從 harbor 通過 docker pull 下載鏡像。

這可能是一個個例,只有特定網絡情況下才會發生的問題。由於我這種網絡情況下發生了多次,因此有必要記錄下來。

環境

  1. Harbor 通過 https://IP 提供服務,使用自簽名的證書。
  2. Harbor 有兩個網卡,分別是 10.10.1/2410.10.10/24,HTTPS 服務證書指定的 10.10.10/24 的 IP。
  3. k8s 新的幾個集羣都在 10.10.0/24 網段。
  4. 這幾個新的集羣都無法從 Harbor 下載鏡像。

處理方法

一開始在 k8s 添加了到 10.10.10/24 的路由,能 ping 通,但是仍然無法 pull。

經過排查網絡問題,發現在 Harbor 上響應請求時,找不到 10.10.0/24 網段的服務器,在 Harbor 同樣配置路由後解決。配置路由就遇到了 Harbor Https 私有證書配置注意事項 中提過的證書問題。按照注意事項配置後解決。

CentOS 添加路由

參考: Add a Static Route on CentOS

添加臨時路由

Linux 通過命令添加路由時都是臨時的,重啓後就丟了。

臨時路由可以測試看看,而且也可以保證不重啓的情況下讓路由生效。

ip route add 10.10.0.0/24 via 10.10.1.1 dev ens160

其中 dev ens160 可以不提供,會自動選擇可用網卡。
本文遇到的問題需要在兩個端互相添加路由。

添加永久路由

根據自己的網卡名,在 /etc/sysconfig/network-scripts/ 下面添加對應的 route-網卡名 配置文件,例如 route-ens160,添加路由內容,和上面命令一樣,就是 ip route add 後面跟着的內容:

10.10.0.0/24 via 10.10.1.1 dev ens160

配置路由後重啓網絡 systemctl restart network

Ansible 腳本

- name: harbor route and ca
  hosts: docker
  vars:
    ca_file: /etc/docker/certs.d/HARBOR_IP/ca.crt
    route_file: /etc/sysconfig/network-scripts/route-ens160
  tasks:
   - name: Create /etc/docker/certs.d/HARBOR_IP
     file:
       path: /etc/docker/certs.d/HARBOR_IP
       state: directory
       mode: '0751'
   - name: copy ca_file
     copy: src=ca.crt dest={{ ca_file }}
   - name: copy route_file
     copy: src=route-ens160 dest={{ route_file }}
   - name: restart service network
     service:
       name: network
       state: restarted

當前目錄需要提供 harbor 的 ca.crt 以及網卡對應的路由配置文件 route-ens160

CA 證書路徑需要將實際的 IP 替換腳本中的 HARBOR_IP

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章