一、签发证书

1.1 安装证书工具(如果已经安装了证书工具,可跳过本步骤)

  1. rm -f /tmp/cfssl* && rm -rf /tmp/certs && mkdir -p /tmp/certs
  2. curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /tmp/cfssl
  3. chmod +x /tmp/cfssl
  4. sudo mv /tmp/cfssl /usr/local/bin/cfssl
  5. curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /tmp/cfssljson
  6. chmod +x /tmp/cfssljson
  7. sudo mv /tmp/cfssljson /usr/local/bin/cfssljson
  8. /usr/local/bin/cfssl version
  9. /usr/local/bin/cfssljson -h
  10. mkdir -p /tmp/certs

1.2 签发根证书

  1. cat > /opt/certs/etcd-ca/etcd-root-ca-csr.json <<EOF
  2. {
  3. "key": {
  4. "algo": "rsa",
  5. "size": 2048
  6. },
  7. "names": [
  8. {
  9. "O": "batar",
  10. "OU": "batar-zhonggu",
  11. "L": "ShenZhen",
  12. "ST": "GuangDong",
  13. "C": "CN"
  14. }
  15. ],
  16. "CN": "etcd-root-ca"
  17. }
  18. EOF
  19. cfssl gencert --initca=true /opt/certs/etcd-ca/etcd-root-ca-csr.json | cfssl-json --bare /opt/certs/etcd-ca/etcd-root-ca
  20. # verify
  21. openssl x509 -in /opt/certs/etcd-ca/etcd-root-ca.pem -text -noout
  22. # cert-generation configuration
  23. cat > /opt/certs/etcd-ca/etcd-gencert.json <<EOF
  24. {
  25. "signing": {
  26. "default": {
  27. "usages": [
  28. "signing",
  29. "key encipherment",
  30. "server auth",
  31. "client auth"
  32. ],
  33. "expiry": "175200h"
  34. }
  35. }
  36. }
  37. EOF

如果正常,将显示以下信息:
# CSR configuration
/tmp/certs/etcd-root-ca-csr.json

# CSR
/tmp/certs/etcd-root-ca.csr

# self-signed root CA public key
/tmp/certs/etcd-root-ca.pem

# self-signed root CA private key
/tmp/certs/etcd-root-ca-key.pem

# cert-generation configuration for other TLS assets
/tmp/certs/etcd-gencert.json

1.3 签发业务证书

  1. cat > /opt/certs/etcd-ca/etcd-ca-csr.json <<EOF
  2. {
  3. "key": {
  4. "algo": "rsa",
  5. "size": 2048
  6. },
  7. "names": [
  8. {
  9. "O": "batar",
  10. "OU": "batar-zhonggu",
  11. "L": "ShenZhen",
  12. "ST": "GuangDong",
  13. "C": "CN"
  14. }
  15. ],
  16. "CN": "etcd-demo",
  17. "hosts": [
  18. "127.0.0.1",
  19. "localhost",
  20. "192.168.5.137",
  21. "192.168.5.138",
  22. "192.168.5.139",
  23. "192.168.5.140",
  24. "192.168.5.141"
  25. ]
  26. }
  27. EOF
  28. cfssl gencert \
  29. --ca /opt/certs/etcd-ca/etcd-root-ca.pem \
  30. --ca-key /opt/certs/etcd-ca/etcd-root-ca-key.pem \
  31. --config /opt/certs/etcd-ca/etcd-gencert.json \
  32. /opt/certs/etcd-ca/etcd-ca-csr.json | cfssl-json --bare /opt/certs/etcd-ca/etcd-ca
  33. # verify
  34. openssl x509 -in /tmp/certs/etcd-137.pem -text -noout

1.4 下载安装包,我用的版本是 3.4.3, 是自己下载然后丢到各个服务器上

1.5 配置etcd (5.137服务器)

  1. # after transferring certs to remote machines
  2. mkdir -p /opt/etcd/certs
  3. cp /tmp/certs/* /opt/etcd/certs
  4. # make sure etcd process has write access to this directory
  5. # remove this directory if the cluster is new; keep if restarting etcd
  6. # rm -rf /data/etcd-server
  7. # to write service file for etcd
  8. cat > /tmp/etcd137.service <<EOF
  9. [Unit]
  10. Description=etcd
  11. Documentation=https://github.com/coreos/etcd
  12. Conflicts=etcd.service
  13. Conflicts=etcd2.service
  14. [Service]
  15. Type=notify
  16. Restart=always
  17. RestartSec=5s
  18. LimitNOFILE=40000
  19. TimeoutStartSec=0
  20. ExecStart=/opt/etcd/etcd --name etcd137 \
  21. --data-dir /data/etcd-server \
  22. --listen-client-urls https://192.168.5.137:2379,http://127.0.0.1:2379 \
  23. --advertise-client-urls https://192.168.5.137:2379,http://127.0.0.1:2379 \
  24. --listen-peer-urls https://192.168.5.137:2380 \
  25. --initial-advertise-peer-urls https://192.168.5.137:2380 \
  26. --initial-cluster etcd137=https://192.168.5.137:2380,etcd138=https://192.168.5.138:2380,etcd139=https://192.168.5.139:2380 \
  27. --initial-cluster-token tkn \
  28. --initial-cluster-state new \
  29. --client-cert-auth \
  30. --trusted-ca-file /opt/etcd/certs/ca.pem \
  31. --cert-file /opt/etcd/certs/etcd-peer.pem \
  32. --key-file /opt/etcd/certs/etcd-peer-key.pem \
  33. --peer-client-cert-auth \
  34. --peer-trusted-ca-file /opt/etcd/certs/ca.pem \
  35. --peer-cert-file /opt/etcd/certs/etcd-peer.pem \
  36. --peer-key-file /opt/etcd/certs/etcd-peer-key.pem
  37. [Install]
  38. WantedBy=multi-user.target
  39. EOF
  40. sudo mv /tmp/etcd137.service /etc/systemd/system/etcd137.service
  41. # to start service
  42. sudo systemctl daemon-reload
  43. sudo systemctl cat etcd137.service
  44. sudo systemctl enable etcd137.service
  45. sudo systemctl start etcd137.service
  46. # to get logs from service
  47. sudo systemctl status etcd.service -l --no-pager
  48. sudo journalctl -u etcd.service -l --no-pager|less
  49. sudo journalctl -f -u etcd.service
  50. # to stop service
  51. sudo systemctl stop etcd.service
  52. sudo systemctl disable etcd.service

1.6 配置etcd(5.138服务器)

  1. # after transferring certs to remote machines
  2. mkdir -p /opt/etcd/certs
  3. cp /tmp/certs/* /opt/etcd/certs
  4. # make sure etcd process has write access to this directory
  5. # remove this directory if the cluster is new; keep if restarting etcd
  6. # rm -rf /data/etcd-server
  7. # to write service file for etcd
  8. cat > /tmp/etcd138.service <<EOF
  9. [Unit]
  10. Description=etcd
  11. Documentation=https://github.com/coreos/etcd
  12. Conflicts=etcd.service
  13. Conflicts=etcd2.service
  14. [Service]
  15. Type=notify
  16. Restart=always
  17. RestartSec=5s
  18. LimitNOFILE=40000
  19. TimeoutStartSec=0
  20. ExecStart=/opt/etcd/etcd --name etcd138 \
  21. --data-dir /data/etcd-server \
  22. --listen-client-urls https://192.168.5.138:2379,http://127.0.0.1:2379 \
  23. --advertise-client-urls https://192.168.5.138:2379,http://127.0.0.1:2379 \
  24. --listen-peer-urls https://192.168.5.138:2380 \
  25. --initial-advertise-peer-urls https://192.168.5.138:2380 \
  26. --initial-cluster etcd137=https://192.168.5.137:2380,etcd138=https://192.168.5.138:2380,etcd139=https://192.168.5.139:2380 \
  27. --initial-cluster-token tkn \
  28. --initial-cluster-state new \
  29. --client-cert-auth \
  30. --trusted-ca-file /opt/etcd/certs/ca.pem \
  31. --cert-file /opt/etcd/certs/etcd-peer.pem \
  32. --key-file /opt/etcd/certs/etcd-peer-key.pem \
  33. --peer-client-cert-auth \
  34. --peer-trusted-ca-file /opt/etcd/certs/ca.pem \
  35. --peer-cert-file /opt/etcd/certs/etcd-peer.pem \
  36. --peer-key-file /opt/etcd/certs/etcd-peer-key.pem
  37. [Install]
  38. WantedBy=multi-user.target
  39. EOF
  40. sudo mv /tmp/etcd138.service /etc/systemd/system/etcd.service
  41. # to start service
  42. sudo systemctl daemon-reload
  43. sudo systemctl cat etcd.service
  44. sudo systemctl enable etcd.service
  45. sudo systemctl start etcd.service
  46. # to get logs from service
  47. sudo systemctl status etcd.service -l --no-pager
  48. sudo journalctl -u etcd.service -l --no-pager|less
  49. sudo journalctl -f -u etcd.service
  50. # to stop service
  51. sudo systemctl stop etcd.service
  52. sudo systemctl disable etcd.service

1.7 配置etcd (5.139服务器)

  1. # after transferring certs to remote machines
  2. mkdir -p /opt/etcd/certs
  3. cp /tmp/certs/* /opt/etcd/certs
  4. # make sure etcd process has write access to this directory
  5. # remove this directory if the cluster is new; keep if restarting etcd
  6. # rm -rf /data/etcd-server
  7. # to write service file for etcd
  8. cat > /tmp/etcd139.service <<EOF
  9. [Unit]
  10. Description=etcd
  11. Documentation=https://github.com/coreos/etcd
  12. Conflicts=etcd.service
  13. Conflicts=etcd2.service
  14. [Service]
  15. Type=notify
  16. Restart=always
  17. RestartSec=5s
  18. LimitNOFILE=40000
  19. TimeoutStartSec=0
  20. ExecStart=/opt/etcd/etcd --name etcd139 \
  21. --data-dir /data/etcd-server \
  22. --listen-client-urls https://192.168.5.139:2379,http://127.0.0.1:2379 \
  23. --advertise-client-urls https://192.168.5.139:2379,http://127.0.0.1:2379 \
  24. --listen-peer-urls https://192.168.5.139:2380 \
  25. --initial-advertise-peer-urls https://192.168.5.139:2380 \
  26. --initial-cluster etcd137=https://192.168.5.137:2380,etcd138=https://192.168.5.138:2380,etcd139=https://192.168.5.139:2380 \
  27. --initial-cluster-token tkn \
  28. --initial-cluster-state new \
  29. --client-cert-auth \
  30. --trusted-ca-file /opt/etcd/certs/ca.pem \
  31. --cert-file /opt/etcd/certs/etcd-peer.pem \
  32. --key-file /opt/etcd/certs/etcd-peer-key.pem \
  33. --peer-client-cert-auth \
  34. --peer-trusted-ca-file /opt/etcd/certs/ca.pem \
  35. --peer-cert-file /opt/etcd/certs/etcd-peer.pem \
  36. --peer-key-file /opt/etcd/certs/etcd-peer-key.pem
  37. [Install]
  38. WantedBy=multi-user.target
  39. EOF
  40. sudo mv /tmp/etcd139.service /etc/systemd/system/etcd.service
  41. # to start service
  42. sudo systemctl daemon-reload
  43. sudo systemctl cat etcd.service
  44. sudo systemctl enable etcd.service
  45. sudo systemctl start etcd.service
  46. # to get logs from service
  47. sudo systemctl status etcd.service -l --no-pager
  48. sudo journalctl -u etcd.service -l --no-pager|less
  49. sudo journalctl -f -u etcd.service
  50. # to stop service
  51. sudo systemctl stop etcd.service
  52. sudo systemctl disable etcd.service

1.9 最后检查一下状态

  1. /opt/etcd/etcdctl \
  2. --endpoints 192.168.5.137:2379,192.168.5.138:2379,192.168.5.139:2379 \
  3. --cacert /opt/etcd/certs/ca.pem \
  4. --cert /opt/etcd/certs/etcd-peer.pem \
  5. --key /opt/etcd/certs/etcd-peer-key.pem \
  6. endpoint health
  7. # endpoint status 查看节点状态,可列出leader

1.10 查看节点列表

  1. /opt/etcd/etcdctl \
  2. --endpoints https://192.168.5.137:2379,https://192.168.5.138:2379,https://192.168.5.139:2379 \
  3. --cacert /opt/etcd/certs/ca.pem \
  4. --cert /opt/etcd/certs/etcd-peer.pem \
  5. --key /opt/etcd/certs/etcd-peer-key.pem \
  6. endpoint status