go etcd clientV3 帶tls demo

go 操作etcdV3

終端操作etcd鏈接:https://www.cnblogs.com/zisefeizhu/p/15427799.html

安裝etcd clientV3
$ get go.etcd.io/etcd/clientv3            
# github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
../../../go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:78: undefined: resolver.BuildOption
../../../go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:182:31: undefined: resolver.ResolveNowOption
# github.com/coreos/etcd/clientv3/balancer/picker
../../../go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/picker/err.go:37:44: undefined: balancer.PickOptions
../../../go/pkg/mod/github.com/coreos/[email protected]+incompatible/clientv3/balancer/picker/roundrobin_balanced.go:55:54: undefined: balancer.PickOptions

# 修復
$  go get -u -x google.golang.org/[email protected]
etcd clientV3 配置TLS 證書

clientv3.Config struct 的 TLS 字段 :TLS 持有客戶端安全憑證(如果有)

構建tls
// 證書
tlsInfo := transport.TLSInfo{
    TrustedCAFile: etcdCa,
    CertFile:      etcdCert,
    KeyFile:       etcdCertKey,
}
_tlsConfig, err := tlsInfo.ClientConfig()
if err != nil {
    fmt.Printf("tlsconfig failed, err:%v\n", err)
}

證書對應終端操作etcd鏈接

TrustedCAFile: --cacert

CertFile: --cert

KeyFile: --key

go etcd client 簡單操作
cfg := clientv3.Config{
    Endpoints:   endpoints,
    DialTimeout: dialTimeout,
    TLS:         _tlsConfig,
}

cli, err := clientv3.New(cfg)
if err != nil {
    fmt.Printf("connect to etcd failed, err:%v\n", err)
    return
}
defer cli.Close()

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
putResponse, err := cli.Put(ctx, "zise", "feizhu")
cancel()
if err != nil {
    fmt.Printf("put to etcd failed, err:%v\n", err)
    return
}
fmt.Println(putResponse)
ctx, cancel = context.WithTimeout(context.Background(), time.Second)
getResponse, err := cli.Get(ctx, "zise")
cancel()
if err != nil {
    fmt.Printf("get to etcd failed, err:%v\n", err)
    return
}
fmt.Println(getResponse)
deleteResponse, err := cli.Delete(cli.Ctx(), "zise")
if err != nil {
    fmt.Printf("delete to etcd failed, err:%v\n", err)
    return
}
fmt.Println(deleteResponse)
go etcd clientV3 demo

目錄結構

源碼

package main

import (
	"context"
	"fmt"
	"go.etcd.io/etcd/clientv3"
	"go.etcd.io/etcd/pkg/transport"
	"os"
	"time"
)

func init() {
	var err error
	dir, err = os.Getwd()
	if err != nil {
		fmt.Printf("getwd dir err:%v\n", err)
		return
	}
	etcdCert = dir + "/tls/etcd/server.crt"
	etcdCertKey = dir + "/tls/etcd/server.key"
	etcdCa = dir + "/tls/etcd/ca.crt"
}

var (
	dir            string
	dialTimeout    = 5 * time.Second
	// requestTimeout = 4 * time.Second
	endpoints      = []string{"https://1.1.1.45:2379", "https://1.1.1.46:2379", "https://1.1.1.47:2379"}
	etcdCert       string
	etcdCertKey    string
	etcdCa         string
)

func main() {
	// 證書
	tlsInfo := transport.TLSInfo{
		TrustedCAFile: etcdCa,
		CertFile:      etcdCert,
		KeyFile:       etcdCertKey,
	}
	_tlsConfig, err := tlsInfo.ClientConfig()
	if err != nil {
		fmt.Printf("tlsconfig failed, err:%v\n", err)
	}

	cfg := clientv3.Config{
		Endpoints:   endpoints,
		DialTimeout: dialTimeout,
		TLS:         _tlsConfig,
	}

	cli, err := clientv3.New(cfg)
	if err != nil {
		fmt.Printf("connect to etcd failed, err:%v\n", err)
		return
	}
	defer cli.Close()

	ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
	putResponse, err := cli.Put(ctx, "zise", "feizhu")
	cancel()
	if err != nil {
		fmt.Printf("put to etcd failed, err:%v\n", err)
		return
	}
	fmt.Println(putResponse)
	ctx, cancel = context.WithTimeout(context.Background(), time.Second)
	getResponse, err := cli.Get(ctx, "zise")
	cancel()
	if err != nil {
		fmt.Printf("get to etcd failed, err:%v\n", err)
		return
	}
	fmt.Println(getResponse)
	deleteResponse, err := cli.Delete(cli.Ctx(), "zise")
	if err != nil {
		fmt.Printf("delete to etcd failed, err:%v\n", err)
		return
	}
	fmt.Println(deleteResponse)
}

測試

$ go run main.go 
{cluster_id:16977795579664915518 member_id:15527552572173850242 revision:382574450 raft_term:8330  <nil> {} [] 0}
{cluster_id:16977795579664915518 member_id:5537999761451951234 revision:382574450 raft_term:8330  [key:"zise" create_revision:382574450 mod_revision:382574450 version:1 value:"feizhu" ] false 1 {} [] 0}
{cluster_id:16977795579664915518 member_id:8044152919570031487 revision:382574451 raft_term:8330  1 [] {} [] 0}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章