我有一个使用TLS进行安全的etcd集群。我希望其他机器使用etcd代理,因此本地主机客户端不需要使用TLS。代理配置如下:
[Service]
Environment="ETCD_PROXY=on"
Environment="ETCD_INITIAL_CLUSTER=etcd1=https://master1.example.com:2380,etcd2=https://master2.example.com:2380"
Environment="ETCD_PEER_TRUSTED_CA_FILE=/etc/kubernetes/ssl/ca.pem"
Environment="ETCD_PEER_CERT_FILE=/etc/kubernetes/ssl/worker.pem"
Environment="ETCD_PEER_KEY_FILE=/etc/kubernetes/ssl/worker-key.pem"
Environment="ETCD_TRUSTED_CA_FILE=/etc/kubernetes/ssl/ca.pem"
在第一个连接的范围内,它是有效的。但是etcd客户端执行一个初始查询来发现服务器的完整列表,然后对该列表中的一个服务器执行真正的查询:
$ etcdctl --debug ls
start to sync cluster using endpoints(http://127.0.0.1:4001,http://127.0.0.1:2379)
cURL Command: curl -X GET http://127.0.0.1:4001/v2/members
got endpoints(https://1.1.1.1:2379,https://1.1.1.2:2379) after sync
Cluster-Endpoints: https://1.1.1.1:2379, https://1.1.1.2:2379
cURL Command: curl -X GET https://1.1.1.1:2379/v2/keys/?quorum=false&recursive=false&sorted=false
cURL Command: curl -X GET https://1.1.1.2:2379/v2/keys/?quorum=false&recursive=false&sorted=false
Error: client: etcd cluster is unavailable or misconfigured
error #0: x509: certificate signed by unknown authority
error #1: x509: certificate signed by unknown authority
如果我将etcd母版更改为--advertise-client-urls=http://localhost:2379
,则代理将连接到自己并进入无限循环。而且代理不修改客户端和主服务器之间的通信量,所以它不会重写广告中的客户端URL。
我不能理解某些东西,因为etcd代理似乎毫无用处。
发布于 2017-02-13 22:08:38
事实证明,大多数的客户(锁匠,法兰等)在这种模式下,代理可以很好地工作。只有etcdctl的行为不同。因为我正在使用etcdctl进行测试,所以我认为代理配置根本不起作用。
etcdctl
与--skip-sync
一起运行,那么它将通过代理进行通信,而不是检索公共端点列表。etcdctl cluster-health
会忽略--skip-sync
,并且总是触及公共的etcd端点。它永远不会与代理一起工作。发布于 2017-06-22 02:14:22
使用选项--endpoints "https://{YOUR_ETCD_ADVERTISE_CILENT_URL}:2379"
。
因为您为etcd配置了TLS,所以应该添加选项--ca-file
、--cert-file
、--key-file
。
https://stackoverflow.com/questions/42170377
复制相似问题