Skip to content

Commit 003e8f1

Browse files
committed
Implement grpc
Signed-off-by: Jian Qiu <[email protected]> Enable tls/authn Signed-off-by: Jian Qiu <[email protected]> Generat config file of grpc Signed-off-by: Jian Qiu <[email protected]> Update decode/encode to work Signed-off-by: Jian Qiu <[email protected]> Add lease/event service Signed-off-by: Jian Qiu <[email protected]> Add lease store impl Signed-off-by: Jian Qiu <[email protected]>
1 parent 2e63e45 commit 003e8f1

File tree

94 files changed

+6084
-737
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+6084
-737
lines changed

cmd/registration/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"open-cluster-management.io/ocm/pkg/cmd/spoke"
1818
"open-cluster-management.io/ocm/pkg/cmd/webhook"
1919
"open-cluster-management.io/ocm/pkg/features"
20+
"open-cluster-management.io/ocm/pkg/server/grpc"
2021
"open-cluster-management.io/ocm/pkg/version"
2122
)
2223

@@ -62,6 +63,7 @@ func newRegistrationCommand() *cobra.Command {
6263
cmd.AddCommand(hub.NewRegistrationController())
6364
cmd.AddCommand(spoke.NewRegistrationAgent())
6465
cmd.AddCommand(webhook.NewRegistrationWebhook())
66+
cmd.AddCommand(grpc.NewGRPCServer())
6567

6668
return cmd
6769
}

go.mod

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ require (
88
github.com/aws/aws-sdk-go-v2/service/eks v1.63.1
99
github.com/aws/aws-sdk-go-v2/service/iam v1.38.6
1010
github.com/aws/smithy-go v1.22.2
11+
github.com/cloudevents/sdk-go/v2 v2.15.3-0.20240911135016-682f3a9684e4
1112
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
1213
github.com/evanphx/json-patch v5.9.0+incompatible
1314
github.com/ghodss/yaml v1.0.0
@@ -24,6 +25,8 @@ require (
2425
github.com/spf13/pflag v1.0.5
2526
github.com/stretchr/testify v1.10.0
2627
github.com/valyala/fasttemplate v1.2.2
28+
golang.org/x/net v0.34.0
29+
google.golang.org/grpc v1.67.0
2730
gopkg.in/yaml.v2 v2.4.0
2831
helm.sh/helm/v3 v3.16.3
2932
k8s.io/api v0.32.2
@@ -39,11 +42,13 @@ require (
3942
open-cluster-management.io/api v0.16.1
4043
open-cluster-management.io/sdk-go v0.16.1-0.20250327091909-6bd6228a47ad
4144
sigs.k8s.io/cluster-inventory-api v0.0.0-20240730014211-ef0154379848
42-
sigs.k8s.io/controller-runtime v0.19.3
45+
sigs.k8s.io/controller-runtime v0.20.2
4346
sigs.k8s.io/kube-storage-version-migrator v0.0.6-0.20230721195810-5c8923c5ff96
4447
sigs.k8s.io/yaml v1.4.0
4548
)
4649

50+
replace open-cluster-management.io/sdk-go => github.com/qiujian16/sdk-go v0.0.0-20250408034223-bb90fdd826c7
51+
4752
require (
4853
cel.dev/expr v0.18.0 // indirect
4954
cloud.google.com/go/compute/metadata v0.5.0 // indirect
@@ -73,15 +78,14 @@ require (
7378
github.com/cespare/xxhash/v2 v2.3.0 // indirect
7479
github.com/cloudevents/sdk-go/protocol/kafka_confluent/v2 v2.0.0-20240413090539-7fef29478991 // indirect
7580
github.com/cloudevents/sdk-go/protocol/mqtt_paho/v2 v2.0.0-20241008145627-6bcc075b5b6c // indirect
76-
github.com/cloudevents/sdk-go/v2 v2.15.3-0.20240911135016-682f3a9684e4 // indirect
7781
github.com/confluentinc/confluent-kafka-go/v2 v2.3.0 // indirect
7882
github.com/coreos/go-semver v0.3.1 // indirect
7983
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
8084
github.com/cyphar/filepath-securejoin v0.3.6 // indirect
8185
github.com/docker/docker v27.1.2+incompatible // indirect
8286
github.com/eclipse/paho.golang v0.21.0 // indirect
8387
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
84-
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
88+
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
8589
github.com/fatih/structs v1.1.0 // indirect
8690
github.com/felixge/fgprof v0.9.4 // indirect
8791
github.com/felixge/httpsnoop v1.0.4 // indirect
@@ -97,7 +101,7 @@ require (
97101
github.com/gobwas/glob v0.2.3 // indirect
98102
github.com/gogo/protobuf v1.3.2 // indirect
99103
github.com/golang/protobuf v1.5.4 // indirect
100-
github.com/google/btree v1.0.1 // indirect
104+
github.com/google/btree v1.1.3 // indirect
101105
github.com/google/cel-go v0.22.0 // indirect
102106
github.com/google/gnostic-models v0.6.8 // indirect
103107
github.com/google/gofuzz v1.2.0 // indirect
@@ -154,7 +158,6 @@ require (
154158
go.uber.org/zap v1.27.0 // indirect
155159
golang.org/x/crypto v0.36.0 // indirect
156160
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect
157-
golang.org/x/net v0.34.0 // indirect
158161
golang.org/x/oauth2 v0.28.0 // indirect
159162
golang.org/x/sync v0.12.0 // indirect
160163
golang.org/x/sys v0.31.0 // indirect
@@ -165,7 +168,6 @@ require (
165168
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
166169
google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7 // indirect
167170
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
168-
google.golang.org/grpc v1.67.0 // indirect
169171
google.golang.org/protobuf v1.35.1 // indirect
170172
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
171173
gopkg.in/inf.v0 v0.9.1 // indirect

go.sum

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxER
115115
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
116116
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
117117
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
118-
github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg=
119-
github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
118+
github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
119+
github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
120120
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
121121
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
122122
github.com/felixge/fgprof v0.9.3/go.mod h1:RdbpDgzqYVh/T9fPELJyV7EYJuHB55UTEULNun8eiPw=
@@ -161,8 +161,8 @@ github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOW
161161
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
162162
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
163163
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
164-
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
165-
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
164+
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
165+
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
166166
github.com/google/cel-go v0.22.0 h1:b3FJZxpiv1vTMo2/5RDUqAHPxkT8mmMfJIrq1llbf7g=
167167
github.com/google/cel-go v0.22.0/go.mod h1:BuznPXXfQDpXKWQ9sPW3TzlAJN5zzFe+i9tIs0yC4s8=
168168
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
@@ -286,6 +286,8 @@ github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G
286286
github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8=
287287
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
288288
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
289+
github.com/qiujian16/sdk-go v0.0.0-20250408034223-bb90fdd826c7 h1:tMO5uhskUKHZETZJC6Oj6CQoRw2uBCHd0pU9hQdu84c=
290+
github.com/qiujian16/sdk-go v0.0.0-20250408034223-bb90fdd826c7/go.mod h1:qvRnjAo/u3RWSEId0f2nPp5NRQdIEYtYD+OZqz2njg4=
289291
github.com/robfig/cron v1.2.0 h1:ZjScXvvxeQ63Dbyxy76Fj3AT3Ut0aKsyd2/tl3DTMuQ=
290292
github.com/robfig/cron v1.2.0/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k=
291293
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
@@ -483,14 +485,12 @@ open-cluster-management.io/addon-framework v0.12.1-0.20250401143304-75b65b5f45e0
483485
open-cluster-management.io/addon-framework v0.12.1-0.20250401143304-75b65b5f45e0/go.mod h1:eReMWXrEHqtilwz5wzEpUrWw9Vfz0HJCH9pi3gOTZns=
484486
open-cluster-management.io/api v0.16.1 h1:mS+4UGxHLPQd7CRM0gdFQdVaz139Lo2bkLfqSE0CDNU=
485487
open-cluster-management.io/api v0.16.1/go.mod h1:9erZEWEn4bEqh0nIX2wA7f/s3KCuFycQdBrPrRzi0QM=
486-
open-cluster-management.io/sdk-go v0.16.1-0.20250327091909-6bd6228a47ad h1:37f9TEwX/U8esBjSJvPleDM3rcFpk9NY5e2ItjO6PcQ=
487-
open-cluster-management.io/sdk-go v0.16.1-0.20250327091909-6bd6228a47ad/go.mod h1:TyOjZC5YxyM5BRNgwTmLuTbHXX6xXqzYBXllrfoVp9w=
488488
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0 h1:CPT0ExVicCzcpeN4baWEV2ko2Z/AsiZgEdwgcfwLgMo=
489489
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
490490
sigs.k8s.io/cluster-inventory-api v0.0.0-20240730014211-ef0154379848 h1:WYPi2PdQyZwZkHG648v2jQl6deyCgyjJ0fkLYgUJ618=
491491
sigs.k8s.io/cluster-inventory-api v0.0.0-20240730014211-ef0154379848/go.mod h1:/aN4e7RWOMHgT4xAjCNkV4YFcpKfpZCeumMIL7S+KNM=
492-
sigs.k8s.io/controller-runtime v0.19.3 h1:XO2GvC9OPftRst6xWCpTgBZO04S2cbp0Qqkj8bX1sPw=
493-
sigs.k8s.io/controller-runtime v0.19.3/go.mod h1:j4j87DqtsThvwTv5/Tc5NFRyyF/RF0ip4+62tbTSIUM=
492+
sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc=
493+
sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY=
494494
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
495495
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
496496
sigs.k8s.io/kube-storage-version-migrator v0.0.6-0.20230721195810-5c8923c5ff96 h1:PFWFSkpArPNJxFX4ZKWAk9NSeRoZaXschn+ULa4xVek=

pkg/registration/hub/manager.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import (
4444
"open-cluster-management.io/ocm/pkg/registration/register"
4545
awsirsa "open-cluster-management.io/ocm/pkg/registration/register/aws_irsa"
4646
"open-cluster-management.io/ocm/pkg/registration/register/csr"
47+
"open-cluster-management.io/ocm/pkg/registration/register/grpc"
4748
)
4849

4950
// HubManagerOptions holds configuration for hub manager controller
@@ -56,6 +57,8 @@ type HubManagerOptions struct {
5657
AutoApprovedCSRUsers []string
5758
AutoApprovedARNPatterns []string
5859
AwsResourceTags []string
60+
GRPCCAFile string
61+
GRPCCAKeyFile string
5962
}
6063

6164
// NewHubManagerOptions returns a HubManagerOptions
@@ -88,6 +91,10 @@ func (m *HubManagerOptions) AddFlags(fs *pflag.FlagSet) {
8891
fs.StringSliceVar(&m.AutoApprovedARNPatterns, "auto-approved-arn-patterns", m.AutoApprovedARNPatterns,
8992
"A list of AWS EKS ARN patterns such that an EKS cluster will be auto approved if its ARN matches with any of the patterns")
9093
fs.StringSliceVar(&m.AwsResourceTags, "aws-resource-tags", m.AwsResourceTags, "A list of tags to apply to AWS resources created through the OCM controllers")
94+
fs.StringVar(&m.GRPCCAFile, "grpc-ca-file", m.GRPCCAFile,
95+
"ca file to sign client cert for grpc")
96+
fs.StringVar(&m.GRPCCAKeyFile, "grpc-key-file", m.GRPCCAKeyFile,
97+
"ca key file to sign client cert for grpc")
9198
m.ImportOption.AddFlags(fs)
9299
}
93100

@@ -186,6 +193,13 @@ func (m *HubManagerOptions) RunControllerManagerWithInformers(
186193
return err
187194
}
188195
drivers = append(drivers, awsIRSAHubDriver)
196+
case "grpc":
197+
grpcHubDriver, err := grpc.NewGRPCHubDriver(
198+
kubeClient, kubeInformers, m.GRPCCAKeyFile, m.GRPCCAFile, 720*time.Hour, controllerContext.EventRecorder)
199+
if err != nil {
200+
return err
201+
}
202+
drivers = append(drivers, grpcHubDriver)
189203
}
190204
}
191205
hubDriver := register.NewAggregatedHubDriver(drivers...)

pkg/registration/register/csr/csr.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
corev1 "k8s.io/api/core/v1"
2020
"k8s.io/apimachinery/pkg/api/meta"
2121
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22-
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2322
"k8s.io/client-go/informers"
2423
"k8s.io/client-go/kubernetes"
2524
"k8s.io/client-go/tools/cache"
@@ -81,6 +80,7 @@ func (c *CSRDriver) Process(
8180
recorder events.Recorder) (*corev1.Secret, *metav1.Condition, error) {
8281
logger := klog.FromContext(ctx)
8382

83+
logger.Info("exisint csr name", "csr", c.csrName)
8484
// reconcile pending csr if exists
8585
if len(c.csrName) > 0 {
8686
// build a secret data map if the csr is approved
@@ -233,6 +233,8 @@ func (c *CSRDriver) Process(
233233
}, err
234234
}
235235

236+
logger.Info("set csr name to", "csr", createdCSRName)
237+
236238
c.keyData = keyData
237239
c.csrName = createdCSRName
238240
return nil, nil, nil
@@ -349,23 +351,30 @@ func (c *CSRDriver) BuildClients(ctx context.Context, secretOption register.Secr
349351
return nil, fmt.Errorf("failed to create CSR control: %w", err)
350352
}
351353

352-
err = csrControl.Informer().AddIndexers(cache.Indexers{
354+
err = c.SetCSRControl(csrControl, secretOption.ClusterName)
355+
if err != nil {
356+
return nil, fmt.Errorf("failed to set CSR control: %w", err)
357+
}
358+
return clients, nil
359+
}
360+
361+
func (c *CSRDriver) SetCSRControl(control CSRControl, clusterName string) error {
362+
c.csrControl = control
363+
err := control.Informer().AddIndexers(cache.Indexers{
353364
indexByCluster: indexByClusterFunc,
354365
})
355366
if err != nil {
356-
return nil, err
367+
return err
357368
}
358369

359-
err = csrControl.Informer().AddIndexers(cache.Indexers{
370+
err = control.Informer().AddIndexers(cache.Indexers{
360371
indexByAddon: indexByAddonFunc,
361372
})
362373
if err != nil {
363-
utilruntime.HandleError(err)
374+
return err
364375
}
365-
366-
c.csrControl = csrControl
367-
c.haltCSRCreation = haltCSRCreationFunc(csrControl.Informer().GetIndexer(), secretOption.ClusterName)
368-
return clients, nil
376+
c.haltCSRCreation = haltCSRCreationFunc(control.Informer().GetIndexer(), clusterName)
377+
return nil
369378
}
370379

371380
var _ register.RegisterDriver = &CSRDriver{}

pkg/registration/register/factory/options.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,21 @@ import (
77
"open-cluster-management.io/ocm/pkg/registration/register"
88
awsirsa "open-cluster-management.io/ocm/pkg/registration/register/aws_irsa"
99
"open-cluster-management.io/ocm/pkg/registration/register/csr"
10+
"open-cluster-management.io/ocm/pkg/registration/register/grpc"
1011
)
1112

1213
type Options struct {
1314
RegistrationAuth string
1415
CSROption *csr.Option
1516
AWSISRAOption *awsirsa.AWSOption
17+
GRPCOption *grpc.Option
1618
}
1719

1820
func NewOptions() *Options {
1921
return &Options{
2022
CSROption: csr.NewCSROption(),
2123
AWSISRAOption: awsirsa.NewAWSOption(),
24+
GRPCOption: grpc.NewOptions(),
2225
}
2326
}
2427

@@ -27,12 +30,15 @@ func (s *Options) AddFlags(fs *pflag.FlagSet) {
2730
"The type of authentication to use to authenticate with hub.")
2831
s.CSROption.AddFlags(fs)
2932
s.AWSISRAOption.AddFlags(fs)
33+
s.GRPCOption.AddFlags(fs)
3034
}
3135

3236
func (s *Options) Validate() error {
3337
switch s.RegistrationAuth {
3438
case helpers.AwsIrsaAuthType:
3539
return s.AWSISRAOption.Validate()
40+
case "grpc":
41+
return s.GRPCOption.Validate()
3642
default:
3743
return s.CSROption.Validate()
3844
}
@@ -42,6 +48,8 @@ func (s *Options) Driver(secretOption register.SecretOption) (register.RegisterD
4248
switch s.RegistrationAuth {
4349
case helpers.AwsIrsaAuthType:
4450
return awsirsa.NewAWSIRSADriver(s.AWSISRAOption, secretOption), nil
51+
case "grpc":
52+
return grpc.NewGRPCDriver(s.GRPCOption, s.CSROption, secretOption)
4553
default:
4654
return csr.NewCSRDriver(s.CSROption, secretOption)
4755
}

0 commit comments

Comments
 (0)