How to Build Jectd Client for One TLS Secured Etcd Cluster

September 6, 2023 ยท View on GitHub

prepare certification files

If your etcd cluster is installed using etcdadm, you are likely to find certification files in the path /etc/etcd/pki/: ca.crt, etcdctl-etcd-client.key, etcdctl-etcd-client.crt.

If your etcd cluster is the builtin etcd in one kubernetes cluster( using kubeadm),

you can find the same files in /etc/kubernetes/pki/etcd/: ca.crt, healthcheck-client.crt, healthcheck-client.key.

Because SslContextBuilder only support a PKCS#8 private key file in PEM format, convert etcdctl-etcd-client.key to etcdctl-etcd-client.key.pem according to netty SslContextBuilder doc.

build jetcd client

        File cert = new File("ca.crt");
        File keyCertChainFile = new File("etcdctl-etcd-client.crt");
        File keyFile = new File("etcdctl-etcd-client.key.pem");
        SslContext context = GrpcSslContexts.forClient()
                .trustManager(cert)
                .keyManager(keyCertChainFile, keyFile)
                .build();
        Client client = Client.builder()
                .endpoints("https://10.168.168.66:2379")
                .sslContext(context)
                .build();

        client.getClusterClient().listMember().get().getMembers().forEach(member -> {
            logger.info("member: {}", member);
        });