2017-02-10 1 views
0

J'ai un cluster etcd utilisant TLS pour la sécurité. Je veux que d'autres machines utilisent le proxy etcd, donc les clients locauxhost n'ont pas besoin d'utiliser TLS. Le proxy est configuré comme ceci:etcd2 en mode proxy ne fait rien d'utile

[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" 

Et cela fonctionne aussi loin que la première connexion. Mais le client ETCD fait une requête initiale pour découvrir la liste complète des serveurs, puis il effectue sa véritable requête sur l'un des serveurs dans cette liste:

$ 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 

Si je change les maîtres ETCD à --advertise-client-urls=http://localhost:2379, le proxy se connectera à lui-même et entrer dans une boucle infinie. Et le proxy ne modifie pas le trafic entre le client et le maître, de sorte qu'il ne réécrit pas les URL des clients annoncés.

Je ne dois pas comprendre quelque chose, parce que le proxy etcd semble inutile.

Répondre

0

Il s'avère que la plupart des clients etcd (locksmith, flanneld, etc.) fonctionneront très bien avec un proxy dans ce mode. C'est seulement etcdctl qui se comporte différemment. Parce que je testais avec etcdctl, je pensais que la configuration de proxy ne fonctionnait pas du tout.

  1. Si etcdctl est exécuté avec --skip-sync, il communiquera par le proxy plutôt que de récupérer la liste des terminaux publics.
  2. etcdctl cluster-health ignore --skip-sync et touche toujours les points de terminaison publique etcd. Cela ne marchera jamais avec un proxy.
0

Avec l'option --endpoints "https://{YOUR_ETCD_ADVERTISE_CILENT_URL}:2379".

Parce que vous avez configuré TLS pour ETCD, vous devez ajouter des options --ca-file, --cert-file, --key-file.