建立calico網絡報錯client response is invalid json

使用docker建立calico網絡失敗。docker

# docker network create --driver calico --ipam-driver calico-ipam testcalico
Error response from daemon: failed to update store for object type *libnetwork.endpointCnt: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint.

查看docker日誌:json

# journalctl -fu docker
-- Logs begin at Sun 2018-05-06 10:42:10 CST. --
May 06 10:51:11 gpu16 dockerd[1045]: time="2018-05-06T10:51:11.997488908+08:00" level=warning msg="Registering as \"192.168.56.16:2375\" in discovery failed: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint."
May 06 10:51:13 gpu16 dockerd[1045]: time="2018-05-06T10:51:13.209441579+08:00" level=error msg="discovery error: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint."
May 06 10:51:13 gpu16 dockerd[1045]: time="2018-05-06T10:51:13.211323271+08:00" level=error msg="discovery error: client: response is invalid json. The endpoint is probably not valid etcd cluster endpoint."
May 06 10:51:13 gpu16 dockerd[1045]: time="2018-05-06T10:51:13.213320054+08:00" level=error msg="discovery error: Unexpected watch error"

首先想到的錯誤緣由多是:calico網絡後臺的分佈式存儲是etcd,而環境中使用的V3版本的etcd,而該版本在API方面既支持V2又支持V3。docker中未正確配置須要的版本,即docker要求使用的etcd API版本和etcd提供的API版本不一致,致使出現該問題。
驗證:命令行手動去獲取etcd的版本號:curl http://<etcd_ip>:2379/versionvim

# curl http://192.168.56.96:2379/version
{"etcdserver":"3.1.9","etcdcluster":"3.1.0"}

返回正常。
看到http,突然想到咱們的環境訪問http和https是須要設置代理http_proxy和https_proxy,一樣,也須要設置no_proxy來過濾不使用代理的IP。若是要訪問的IP不在no_proxy的範圍內,代理就會返回非法的http應答,而這個應答不是json格式的,極可能就對應了錯誤日誌中的「response is invalid json」部分。在環境變量中,已經設置了http_proxy,https_proxy和no_proxy,可是,docker不能使用操做系統的這三個環境變量,咱們須要配置docker的這三個環境變量。並且,在建立calico網絡時,docker會經過http請求向etcd註冊,所以在no_proxy中須要包含etcd集羣的IPbash

# mkdir -p /etc/systemd/system/docker.service.d/
# vim /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.11.200:8080/" "HTTPS_PROXY=https://192.168.11.200:8080/" "NO_PROXY=192.168.56.109,192.168.56.96"

# systemctl daemon-reload
# systemctl restart docker

待docker服務重啓完畢,再嘗試建立calico網絡,成功。網絡

# docker network create --driver calico --ipam-driver calico-ipam testcalico
53cbe9b82451b017be6d5d80a8fc17e320f6269521dfeabb7e07fd79ee92e3ef
相關文章
相關標籤/搜索