zoukankan      html  css  js  c++  java
  • etcd启用https服务

    关于etcd的集群配置可直接参考etcd集群部署

    这篇文档只是在其基础上增加ssl加密验证的过程。

    要让集群使用ssl,首先需要为集群生成ssl证书。

    我们使用cfssl系列工具来生成相关证书。

    cfssl相关工具下载

    curl -s -L -o /opt/kubernetes/bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
    curl -s -L -o /opt/kubernetes/bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
    chmod +x /opt/kubernetes/bin/{cfssl,cfssljson}
    
    

    生成etcd所需要的ssl证书

    生成ca证书

    ca-config.json配置如下:

    {
        "signing": {
            "default": {
                "expiry": "175200h"
            },
            "profiles": {
                "kubernetes": {
                    "expiry": "175200h",
                    "usages": [
                        "signing",
                        "key encipherment",
                        "server auth",
    		    "client auth"
                    ]
                },
                "etcd": {
                    "expiry": "175200h",
                    "usages": [
                        "signing",
                        "key encipherment",
                        "server auth",
    		            "client auth"
                    ]
                }
            }
        }
    }
    

    字段说明:

    • ca-config.json:可以定义多个Profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书的时候使用某个Profile。这里定义了两个Profile,一个用于kubernetes,一个用于etcd。但因为这篇文档不涉及到kubernetes的配置,所以kubenretes段是不使用的。
    • signing:表示该证书可用于签名其他证书;生成的ca.pem证书中CA=TRUE
    • server auth:表示client可以使用该ca对server提供的证书进行验证
    • client auth:表示server可以用该ca对client提供的证书进行验证

    ca-csr.json配置如下:

    {
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "L": "Wuhan",
                "ST": "Hubei",
        	    "O": "k8s",
        	    "OU": "System"
            }
        ]
    }
    

    生成ca证书:

    cfssl gencert --initca ca-csr.json | cfssljson --bare ca
    

    执行后会生成三个文件:

    • ca-key.pem : CA的私有key
    • ca.pem : CA证书
    • ca.csr : CA的证书请求文件

    生成etcd服务端证书

    etcd服务端证书用于加密etcd集群之间的通信

    etcd-csr.json文件内容如下:

    {
      "CN": "etcd-server",
      "hosts": [
        "localhost",
        "0.0.0.0",
        "127.0.0.1",
        "10.5.12.16",
        "10.5.12.17",
        "10.5.12.18"
      ],
      "key": {
        "algo": "rsa",
        "size": 4096
      },
      "names": [
        {
          "C": "CN",
          "L": "Wuhan",
          "O": "k8s",
          "OU": "System",
          "ST": "Hubei"
        }
      ]
    }
    

    生成etcd服务端证书:

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-csr.json | cfssljson -bare etcd
    

    生成三个文件:etcd.pem, etcd-key.pem, etcd.csr

    生成etcd客户端证书

    etcd客户端证书用于etcd客户端连接etcd时提供验证方式

    etcd-client-csr.json

    {
      "CN": "etcd-client",
      "hosts": [
        ""
      ],
      "key": {
        "algo": "rsa",
        "size": 4096
      },
      "names": [
        {
          "C": "CN",
          "L": "Wuhan",
          "ST": "Hubei",
          "O": "k8s",
          "OU": "System"
        }
      ]
    }
    
    

    生成客户端证书:

    cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd etcd-client-csr.json | cfssljson -bare etcd-client
    
    

    生成三个文件:etcd-client.pem, etcd-client-key.pem, etcd-client.csr

    最佳实践: 在实际生产中,为了简化etcd的管理,我们通常不会为服务端和客户端各生成一套证书,而是生成一套即可以用于服务端也可以同时用于客户端的证书。在我们上面生成etcd的ca证书的时候,可以看到etcd-ca-config.json中etcd的证书useags中同时有server auth和client auth。也就是说,基于我们的ca证书生成的etcd证书本身就可以同时用于服务端与客户端。然而,我们在生成etcd服务端证书的时候,在etcd-server-csr.json中指定了hosts,所以该证书只能被指定的hosts列表中的主机使用,要想所有的客户端都能使用这个证书。最简单的方法就是和生成etcd客户端证书时一样,直接将hosts留空。反过来,也就是说,我们可以直接将生成的etcd客户端证书用于服务端。

    修改etcd集群配置文件

    修改后的/opt/kubernetes/cfg/etcd.conf文件内容如下:

    ETCD_NAME=etcd1
    ETCD_DATA_DIR="/data/etcd"
    ETCD_LISTEN_CLIENT_URLS="http://10.5.12.16:2379,http://127.0.0.1:2379"
    ETCD_LISTEN_PEER_URLS="http://10.5.12.16:2380"
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.5.12.16:2380"
    ETCD_INITIAL_CLUSTER="etcd1=http://10.5.12.16:2380,etcd2=http://10.5.12.17:2380,etcd3=http://10.5.12.18:2380"
    ETCD_INITIAL_CLUSTER_STATE="new"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_ADVERTISE_CLIENT_URLS="http://10.5.12.16:2379"
    CLIENT_CERT_AUTH="true"
    ETCD_CA_FILE="/opt/kubernetes/ssl/ca.pem"
    ETCD_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"
    ETCD_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"
    PEER_CLIENT_CERT_AUTH="true"
    ETCD_PEER_CA_FILE="/opt/kubernetes/ssl/ca.pem"
    ETCD_PEER_CERT_FILE="/opt/kubernetes/ssl/etcd.pem"
    ETCD_PEER_KEY_FILE="/opt/kubernetes/ssl/etcd-key.pem"
    

    重启etcd集群

    systemctl restart etcd
    

    验证集群健康情况

    验证集群健康状态时,需要使用客户端证书来连接etcd集群:

    etcdctl --cert-file=/opt/kubernetes/ssl/etcd-client.pem  --key-file=/opt/kubernetes/ssl/etcd-client-key.pem --ca-file=/opt/kubernetes/ssl/ca.pem --endpoints=https://10.5.12.16:2379,https://10.5.12.17:2379,https://10.5.12.18:2379 member list
    
  • 相关阅读:
    贝叶斯网路的采样
    马尔可夫蒙特卡洛采样法
    高斯分布的采样
    常见的采样方法
    正则化
    随机梯度下降
    机器学习中的优化问题
    【原】涉及数据库的单元测试-JTeser
    高度和宽度
    定位position
  • 原文地址:https://www.cnblogs.com/breezey/p/8847332.html
Copyright © 2011-2022 走看看