@@ -19,6 +19,8 @@ import (
19
19
"os"
20
20
"sync"
21
21
22
+ "github.com/alibaba/sentinel-golang/util"
23
+
22
24
"github.com/opensergo/opensergo-control-plane/pkg/controller"
23
25
"github.com/opensergo/opensergo-control-plane/pkg/model"
24
26
trpb "github.com/opensergo/opensergo-control-plane/pkg/proto/transport/v1"
@@ -27,12 +29,14 @@ import (
27
29
)
28
30
29
31
type ControlPlane struct {
30
- operator * controller.KubernetesOperator
31
- server * transport.Server
32
+ operator * controller.KubernetesOperator
33
+ server * transport.Server
34
+ secureServer * transport.Server
32
35
33
36
protoDesc * trpb.ControlPlaneDesc
34
37
35
38
mux sync.RWMutex
39
+ ch chan error
36
40
}
37
41
38
42
func NewControlPlane () (* ControlPlane , error ) {
@@ -44,6 +48,8 @@ func NewControlPlane() (*ControlPlane, error) {
44
48
}
45
49
46
50
cp .server = transport .NewServer (uint32 (10246 ), []model.SubscribeRequestHandler {cp .handleSubscribeRequest })
51
+ // On port 10248, it can use tls transport
52
+ cp .secureServer = transport .NewSecureServer (uint32 (10248 ), []model.SubscribeRequestHandler {cp .handleSubscribeRequest })
47
53
cp .operator = operator
48
54
49
55
hostname , herr := os .Hostname ()
@@ -62,20 +68,45 @@ func (c *ControlPlane) Start() error {
62
68
if err != nil {
63
69
return err
64
70
}
65
- // Run the transport server
66
- err = c .server .Run ()
67
- if err != nil {
68
- return err
69
- }
70
71
71
- return nil
72
+ go util .RunWithRecover (func () {
73
+ // Run the transport server
74
+ log .Println ("Starting grpc server on port 10246!" )
75
+ err = c .server .Run ()
76
+ if err != nil {
77
+ c .ch <- err
78
+ log .Fatal ("Failed to run the grpc server" )
79
+ }
80
+ })
81
+
82
+ go util .RunWithRecover (func () {
83
+ // Run the secure transport server
84
+ log .Println ("Starting secure grpc server on port 10248!" )
85
+ err = c .secureServer .Run ()
86
+ if err != nil {
87
+ c .ch <- err
88
+ log .Fatal ("Failed to run the secure grpc server" )
89
+ }
90
+ })
91
+ err = <- c .ch
92
+ return err
72
93
}
73
94
74
- func (c * ControlPlane ) sendMessage (namespace , app , kind string , dataWithVersion * trpb.DataWithVersion , status * trpb.Status , respId string ) error {
75
- connections , exists := c .server .ConnectionManager ().Get (namespace , app , kind )
95
+ func (c * ControlPlane ) sendMessage (namespace , app , kind string , dataWithVersion * trpb.DataWithVersion , status * trpb.Status , respId string , isSecure bool ) error {
96
+ var connections []* transport.Connection
97
+ var exists bool
98
+ if isSecure {
99
+ connections , exists = c .secureServer .ConnectionManager ().Get (namespace , app , kind )
100
+ } else {
101
+ connections , exists = c .server .ConnectionManager ().Get (namespace , app , kind )
102
+ }
76
103
if ! exists || connections == nil {
77
104
return errors .New ("There is no connection for this kind" )
78
105
}
106
+ return c .innerSendMessage (namespace , app , kind , dataWithVersion , status , respId , connections )
107
+ }
108
+
109
+ func (c * ControlPlane ) innerSendMessage (namespace , app , kind string , dataWithVersion * trpb.DataWithVersion , status * trpb.Status , respId string , connections []* transport.Connection ) error {
79
110
for _ , connection := range connections {
80
111
if connection == nil || ! connection .IsValid () {
81
112
// TODO: log.Debug
@@ -106,22 +137,13 @@ func (c *ControlPlane) sendMessageToStream(stream model.OpenSergoTransportStream
106
137
})
107
138
}
108
139
109
- func (c * ControlPlane ) handleSubscribeRequest (clientIdentifier model.ClientIdentifier , request * trpb.SubscribeRequest , stream model.OpenSergoTransportStream ) error {
110
- //var labels []model.LabelKV
111
- //if request.Target.Labels != nil {
112
- // for _, label := range request.Target.Labels {
113
- // labels = append(labels, model.LabelKV{
114
- // Key: label.Key,
115
- // Value: label.Value,
116
- // })
117
- // }
118
- //}
140
+ func (c * ControlPlane ) handleSubscribeRequest (clientIdentifier model.ClientIdentifier , request * trpb.SubscribeRequest , stream model.OpenSergoTransportStream , isSecure bool ) error {
119
141
for _ , kind := range request .Target .Kinds {
120
142
crdWatcher , err := c .operator .RegisterWatcher (model.SubscribeTarget {
121
143
Namespace : request .Target .Namespace ,
122
144
AppName : request .Target .App ,
123
145
Kind : kind ,
124
- })
146
+ }, isSecure )
125
147
if err != nil {
126
148
status := & trpb.Status {
127
149
Code : transport .RegisterWatcherError ,
@@ -135,7 +157,11 @@ func (c *ControlPlane) handleSubscribeRequest(clientIdentifier model.ClientIdent
135
157
}
136
158
continue
137
159
}
138
- _ = c .server .ConnectionManager ().Add (request .Target .Namespace , request .Target .App , kind , transport .NewConnection (clientIdentifier , stream ))
160
+ if isSecure {
161
+ _ = c .secureServer .ConnectionManager ().Add (request .Target .Namespace , request .Target .App , kind , transport .NewConnection (clientIdentifier , stream ))
162
+ } else {
163
+ _ = c .server .ConnectionManager ().Add (request .Target .Namespace , request .Target .App , kind , transport .NewConnection (clientIdentifier , stream ))
164
+ }
139
165
// watcher缓存不空就发送
140
166
rules , version := crdWatcher .GetRules (model.NamespacedApp {
141
167
Namespace : request .Target .Namespace ,
0 commit comments