發表文章

目前顯示的是有「DTR」標籤的文章

DTR 設定常見問題

經常有人來信提到這個問題,在這統一把這問題的解決方法做個說明。 在使用 docker pull 命令想要從 DTR (Docker Trusted Registry) 取出 image 的時候,碰到下列的錯誤訊息。 [root@dtr1]# docker pull dtr [dtr-url] Using default tag: latest Error response from daemon: Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid 要讓每一個 Docker 節點,能夠順利使用 docker push / docker pull 命令存取 DTR , 得讓那 Docker 節點能夠信任 DTR 節點的 TLS 憑證, 要取得 DTR CA 可通過 DTR API 下載下來,如以 curl 做範例: # curl -k https://[dtr-url] /ca -o [dtr-url].crt 然後把 crt 文件更新到作業系統的可信任的憑證清單內。每一作業系統更新配置憑證的方法都不一樣,將另外說明。 注意:上述提到的方法適用於 UCP 叢集內的每一個節點,不論是 manager 角色或 worker 角色。也可用在叢集外的任一 Docker 節點。 另外一種比較簡單但是不推薦的做法是修改 /etc/docker/daemon.json ,設定 DTR 的地址。 如果已經確定每一個 UCP 節點與 DTR 節點的整合已經完成,仍然有問題, 則可能是每個節點作業系統時間同步所導致。 要更新同步每個節點的時間,可以用 ntpd , 如果是比較新的版本的 RHEL / CentOS 則使用 chronyd , # chronyc sources # chronyc tracking 如果對外網際網路是連通的,或可直接在 crontab 填入 ntpdate 指令,後面加上外部上游 time server ,例如 # ntpdate time.stdtime.gov.tw 當每個節點作業系統時間正確同步之後,就可以順利使用 docker push 或 pull 命令存取 D...

如何建置一個通過 DTR 弱點掃描的 Image ?

Docker EE 產品裡有一個重要的軟體元件 DTR (Docker Trusted Registry), 用來作為叢集內私有 image 倉庫,保存 image, 管理 image 清單,同時提供 image 數字簽署,CVE 弱點掃描,image 鏡像拷貝等等功能。 今天這篇文章說明如何建置一個儘可能去除所有嚴重或大型的弱點,儘可能通過 DTR 弱點掃描的 Base Image, 這裡給出幾個重要方針供參考。 以下說明以 Linux image 為例。 Windows 環境的 base image 不是開源的, 有任何安全上的弱點皆需要由微軟官方提供更新,因此不在本文討論範疇。 1. 使用 alpine 作為起始 base image 而不是其他 Linux base image 像是 CentOS, UBUNTU. alpine 比較小,小於 5MB,預設裡面只有最小足以開機以及能夠運行 shell 環境的二進制檔案內容。 其 C lib 是使用優化過的靜態函式庫 musl 所組成。 由於包含的軟體內容不多,因此相對其他 distribution 更安全。 如果需要其他的工具,像是 ssh ,預設裡面沒有,要另外編寫 Dockerfile 並建置。 有需要的軟體工具再加進去,不需要的不要加入。 2. 同樣地,對於包含 middleware 內容的 base image,儘可能使用其底層以 alpine 系統所堆疊起來的, 舉幾個例子:要使用 Python v3.7.4 的 image 時, 應該選擇用 $ docker pull python:3.7.4-alpine3.10 而不是 $ docker pull python:3.7.4-buster 另外,關於常見的 nginx image (v1.16.1), 應該選擇用 $ docker pull nginx:1.16.1-alpine 而不是 $ docker pull nginx:1.16.1 3. 承上,從 Docker Hub 拉下來的 alpine image, 要再做內部更新,多建置一次產生新的 layer 然後再堆疊應用程式。 編寫 Dockerfile 的時候, 在任一個 FROM 指令指明所需要的 Alpin...

DTR Backend with S3-compatible Storage (Minio)

預設情況下,推送到 DTR 保存的所有 images 都是在 DTR 當前主機的磁碟內。如果這個 DTR 出現任何嚴重問題無法運作,則外界無法對此 DTR 節點做存取 images。 爲了使得 DTR 在叢集中保持高可用性的狀態,必須設定更多的 DTR replicas,同時必須爲所有的 DTR 節點設定後端存儲。 我們可以利用 minio 作爲 DTR 後端存儲機制。minio 是一個分散式,容器化,同時兼容 S3 API 的資料庫。在爲 DTR 設定 minio 之前,下面先說明如何佈署 minio 在容器平台上。 建立 secrets 保存密碼存息,這是一個良好的實踐。 # 以 docker swarm 保管密碼訊息 $ echo "accesskey-example" | docker secret create access_key - $ echo "secretkey-example" | docker secret create secret_key - 編寫如下 docker-compose.yml 文件 # docker-compose.yml version: '3.3' services: minio1: image: minio/minio:edge hostname: minio1 environment: MINIO_REGION: 'my_region' deploy: restart_policy: delay: 10s max_attempts: 10 window: 60s placement: constraints: - node.labels.minio1==true volumes: - minio1-data:/export ports: - "9001:9000" networks: - minio_distributed command: server http...

Credentials Store for Docker Client

這篇文章說明 Linux 系統環境下 Docker client 的配置,關於 Credentials Store 的部分。Credentials Store 可用來以進階加密方式管理登入 registry 後的密碼,是一種增強 Docker client 安全性的措施。 docker login 命令用來在進行映像文件倉庫 ( image registry ) 操作 docker push/ docker pull 前的登入命令, docker login [registry-url] [registry-url] 可以是叢集內部私有的 image registry 例如像是 DTR (Docker Trusted Registry) 如果省略 [registry-url] ,那麼預設就是登入到官方 Docker Hub (https://hub.docker.com) 。 docker login 到 registry 的時候需要輸入帳號密碼。 如沒有先配置 credentials store,(預設情況是沒有配置的), 則每次 docker login 任意 registry 之後都會出現下列警告訊息, WARNING! Your password will be stored unencrypted in $HOME/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store 上述警告訊息意思時說用來登入 registry 的密碼已經被保存在家目錄下的 config.json 文件裡,但是是以非加密的形式保存。而那是不安全的。 與 docker login 命令相對的命令是 docker logout, 登出 registry ,這會移除保存在 config.json 文件內的密碼資料。 如果 docker login 但是後續沒有做 docker logout, 密碼資料就會一直保存在家目錄裏面的 config.json ,即使退出當前的 shell sessi...

這個網誌中的熱門文章

Docker 環境下的 Proxy 配置