Skip to content

Commit 47e7c19

Browse files
author
smiletan
authored
Merge pull request #432 from intelligentfu8/cg-rename
[Feature]dorisctl support tls access
2 parents 2b1b1ef + fb4b5c9 commit 47e7c19

File tree

5 files changed

+60
-17
lines changed

5 files changed

+60
-17
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ else
111111
endif
112112

113113
.PHONY: build
114-
build: manifests generate fmt vet helm ## Build manager binary.
114+
build: manifests generate vet helm ## Build manager binary.
115115
go build -ldflags=$(LDFLAGS) -o bin/dorisoperator cmd/operator/main.go
116116
go build -ldflags=$(LDFLAGS) -o bin/dorisctl cmd/dorisctl/main.go
117117
go build -o bin/doris-debug cmd/doris-debug/main.go

cmd/dorisctl/root_command/cmd.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@
1717
package root_command
1818

1919
import (
20+
"io"
21+
2022
"github.com/apache/doris-operator/pkg/common/cmd/get"
2123
"github.com/apache/doris-operator/pkg/common/cmd/templates"
2224
cmdutil "github.com/apache/doris-operator/pkg/common/cmd/util"
2325
"github.com/spf13/cobra"
24-
"io"
2526
)
2627

2728
func NewDorisctlCommand(out io.Writer) (*cobra.Command, error) {
@@ -40,6 +41,9 @@ func NewDorisctlCommand(out io.Writer) (*cobra.Command, error) {
4041
flags.StringVar(&dc.User, "user", "", "The name of user to access doris.")
4142
flags.StringVar(&dc.Password, "password", "", "The password of login in doris.")
4243
flags.IntVar(&dc.QueryPort, "query-port", 9030, "The FE mysql protocol listen port")
44+
flags.StringVar(&dc.SSLCaPath, "ssl-ca", "", "the root certificate path.")
45+
flags.StringVar(&dc.SSLCrtPath, "ssl-cert", "", "the client certificate path.")
46+
flags.StringVar(&dc.SSLKeyPath, "ssl-key", "", "the client private key path")
4347
groups := templates.CommandGroups{
4448
{
4549
Message: "Basic Commands (Beginner):",

pkg/common/cmd/get/get.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"github.com/spf13/cobra"
2626
"github.com/tidwall/gjson"
2727
"io"
28-
"strconv"
2928
"strings"
3029
)
3130

@@ -73,7 +72,7 @@ func (o *GetOptions) getComputeGroup(computeGroupName string) {
7372

7473
//getNode get the node details information.
7574
func (o *GetOptions) getNode(node string) {
76-
c, err := cmdutil.NewDorisClient(o.dc.User, o.dc.Password, o.dc.FeHost, strconv.Itoa(o.dc.QueryPort))
75+
c, err := cmdutil.NewDorisClient(o.dc)
7776
if err != nil {
7877
fmt.Fprintf(o.out, "%s\n", err.Error())
7978
return

pkg/common/cmd/util/client.go

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,17 @@
1717
package cmdutil
1818

1919
import (
20-
"errors"
21-
"fmt"
22-
"github.com/apache/doris-operator/pkg/common/cmd/types"
23-
_ "github.com/go-sql-driver/mysql"
24-
"github.com/jmoiron/sqlx"
20+
"crypto/tls"
21+
"crypto/x509"
22+
"errors"
23+
"fmt"
24+
"os"
25+
"strconv"
26+
27+
"github.com/apache/doris-operator/pkg/common/cmd/types"
28+
"github.com/go-sql-driver/mysql"
29+
_ "github.com/go-sql-driver/mysql"
30+
"github.com/jmoiron/sqlx"
2531
)
2632

2733
//Client provides abstractions that access doris cluster methods.
@@ -31,16 +37,47 @@ type Client interface {
3137
}
3238

3339
var _ Client = &DorisClient{}
40+
3441
type DorisClient struct {
3542
db *sqlx.DB
3643
}
3744

38-
func NewDorisClient(user, password, host, queryPort string) (*DorisClient, error) {
45+
func NewDorisClient(dc *DorisConfig) (*DorisClient, error) {
46+
user := dc.User
47+
password := dc.Password
48+
host := dc.FeHost
49+
queryPort := strconv.Itoa(dc.QueryPort)
3950
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", user, password, host, queryPort, "mysql")
40-
db, err := sqlx.Open("mysql", dsn)
41-
if err != nil {
42-
return nil, errors.New("NewDorisSqlDB sqlx.Open failed open doris sql client connection, err: "+ err.Error())
51+
rootCertPool := x509.NewCertPool()
52+
if dc.SSLCaPath != "" {
53+
pem, err := os.ReadFile(dc.SSLCaPath)
54+
if err != nil {
55+
return nil, errors.New("read root ca cert failed," + err.Error())
56+
}
57+
58+
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
59+
return nil, errors.New("Failed to append ca cert or pem failed.")
60+
}
61+
62+
clientCerts := make([]tls.Certificate, 0, 1)
63+
cCert, err := tls.LoadX509KeyPair(dc.SSLCrtPath, dc.SSLKeyPath)
64+
if err != nil {
65+
return nil, errors.New("load x509 key pair failed," + err.Error())
66+
}
67+
68+
clientCerts = append(clientCerts, cCert)
69+
if err = mysql.RegisterTLSConfig("doris", &tls.Config{
70+
RootCAs: rootCertPool,
71+
Certificates: clientCerts,
72+
}); err != nil {
73+
return nil, errors.New("register tls config failed," + err.Error())
74+
}
75+
dsn = dsn + "?tls=doris"
4376
}
77+
db, err := sqlx.Open("mysql", dsn)
78+
if err != nil {
79+
return nil, errors.New("NewDorisSqlDB sqlx.Open failed open doris sql client connection, err: " + err.Error())
80+
}
4481

4582
return &DorisClient{
4683
db:db,

pkg/common/cmd/util/doris_conf.go

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717
package cmdutil
1818

1919
type DorisConfig struct {
20-
FeHost string
21-
QueryPort int
22-
User string
23-
Password string
20+
FeHost string
21+
QueryPort int
22+
User string
23+
Password string
24+
SSLCrtPath string
25+
SSLCaPath string
26+
SSLKeyPath string
2427
}

0 commit comments

Comments
 (0)