Skip to content

Commit 90105c1

Browse files
qiujian16skeeey
authored andcommitted
grpc server
Signed-off-by: Wei Liu <[email protected]>
1 parent 33c2631 commit 90105c1

File tree

49 files changed

+3889
-33
lines changed

Some content is hidden

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

49 files changed

+3889
-33
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: 3 additions & 3 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.11+incompatible
1314
github.com/ghodss/yaml v1.0.0
@@ -25,6 +26,7 @@ require (
2526
github.com/spf13/pflag v1.0.5
2627
github.com/stretchr/testify v1.10.0
2728
github.com/valyala/fasttemplate v1.2.2
29+
golang.org/x/net v0.38.0
2830
gopkg.in/yaml.v2 v2.4.0
2931
helm.sh/helm/v3 v3.17.3
3032
k8s.io/api v0.32.4
@@ -39,7 +41,7 @@ require (
3941
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
4042
open-cluster-management.io/addon-framework v1.0.0
4143
open-cluster-management.io/api v1.0.0
42-
open-cluster-management.io/sdk-go v1.0.0
44+
open-cluster-management.io/sdk-go v1.0.1-0.20250625021536-7eeddd26d3e2
4345
sigs.k8s.io/about-api v0.0.0-20250131010323-518069c31c03
4446
sigs.k8s.io/cluster-inventory-api v0.0.0-20240730014211-ef0154379848
4547
sigs.k8s.io/controller-runtime v0.20.2
@@ -76,7 +78,6 @@ require (
7678
github.com/cespare/xxhash/v2 v2.3.0 // indirect
7779
github.com/cloudevents/sdk-go/protocol/kafka_confluent/v2 v2.0.0-20240413090539-7fef29478991 // indirect
7880
github.com/cloudevents/sdk-go/protocol/mqtt_paho/v2 v2.0.0-20241008145627-6bcc075b5b6c // indirect
79-
github.com/cloudevents/sdk-go/v2 v2.15.3-0.20240911135016-682f3a9684e4 // indirect
8081
github.com/confluentinc/confluent-kafka-go/v2 v2.3.0 // indirect
8182
github.com/coreos/go-semver v0.3.1 // indirect
8283
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
@@ -155,7 +156,6 @@ require (
155156
go.uber.org/zap v1.27.0 // indirect
156157
golang.org/x/crypto v0.37.0 // indirect
157158
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67 // indirect
158-
golang.org/x/net v0.38.0 // indirect
159159
golang.org/x/oauth2 v0.28.0 // indirect
160160
golang.org/x/sync v0.13.0 // indirect
161161
golang.org/x/sys v0.32.0 // indirect

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,8 @@ open-cluster-management.io/addon-framework v1.0.0 h1:ejTk4hPAJnwCSxQhY/tVDPg3SeH
493493
open-cluster-management.io/addon-framework v1.0.0/go.mod h1:Gw9zRGvuNJJ3XhTYanIuA7FFFw0EjtoE74l5OBZCZf8=
494494
open-cluster-management.io/api v1.0.0 h1:54QllH9DTudCk6VrGt0q8CDsE3MghqJeTaTN4RHZpE0=
495495
open-cluster-management.io/api v1.0.0/go.mod h1:/OeqXycNBZQoe3WG6ghuWsMgsKGuMZrK8ZpsU6gWL0Y=
496-
open-cluster-management.io/sdk-go v1.0.0 h1:pIiAHM/hzV3rEw3LSMgZuAUiNgkBrn8hLxFvJM5frw0=
497-
open-cluster-management.io/sdk-go v1.0.0/go.mod h1:vkLwIDN9W+WBlrHgHxMl5ZoHRT+H5qOq3cXAk7U5AJc=
496+
open-cluster-management.io/sdk-go v1.0.1-0.20250625021536-7eeddd26d3e2 h1:IIu3Udg7Y4SCpy2Rzk1CvQguyWgI5L6jbjh/NVjWikU=
497+
open-cluster-management.io/sdk-go v1.0.1-0.20250625021536-7eeddd26d3e2/go.mod h1:vkLwIDN9W+WBlrHgHxMl5ZoHRT+H5qOq3cXAk7U5AJc=
498498
sigs.k8s.io/about-api v0.0.0-20250131010323-518069c31c03 h1:1ShFiMjGQOR/8jTBkmZrk1gORxnvMwm1nOy2/DbHg4U=
499499
sigs.k8s.io/about-api v0.0.0-20250131010323-518069c31c03/go.mod h1:F1pT4mK53U6F16/zuaPSYpBaR7x5Kjym6aKJJC0/DHU=
500500
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0 h1:CPT0ExVicCzcpeN4baWEV2ko2Z/AsiZgEdwgcfwLgMo=

pkg/registration/hub/manager.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import (
4646
"open-cluster-management.io/ocm/pkg/registration/register"
4747
awsirsa "open-cluster-management.io/ocm/pkg/registration/register/aws_irsa"
4848
"open-cluster-management.io/ocm/pkg/registration/register/csr"
49+
"open-cluster-management.io/ocm/pkg/registration/register/grpc"
4950
)
5051

5152
// HubManagerOptions holds configuration for hub manager controller
@@ -59,6 +60,8 @@ type HubManagerOptions struct {
5960
AutoApprovedARNPatterns []string
6061
AwsResourceTags []string
6162
Labels string
63+
GRPCCAFile string
64+
GRPCCAKeyFile string
6265
}
6366

6467
// NewHubManagerOptions returns a HubManagerOptions
@@ -93,6 +96,10 @@ func (m *HubManagerOptions) AddFlags(fs *pflag.FlagSet) {
9396
fs.StringSliceVar(&m.AwsResourceTags, "aws-resource-tags", m.AwsResourceTags, "A list of tags to apply to AWS resources created through the OCM controllers")
9497
fs.StringVar(&m.Labels, "labels", m.Labels,
9598
"Labels to be added to the resources created by registration controller. The format is key1=value1,key2=value2.")
99+
fs.StringVar(&m.GRPCCAFile, "grpc-ca-file", m.GRPCCAFile,
100+
"ca file to sign client cert for grpc")
101+
fs.StringVar(&m.GRPCCAKeyFile, "grpc-key-file", m.GRPCCAKeyFile,
102+
"ca key file to sign client cert for grpc")
96103
m.ImportOption.AddFlags(fs)
97104
}
98105

@@ -195,6 +202,13 @@ func (m *HubManagerOptions) RunControllerManagerWithInformers(
195202
return err
196203
}
197204
drivers = append(drivers, awsIRSAHubDriver)
205+
case "grpc":
206+
grpcHubDriver, err := grpc.NewGRPCHubDriver(
207+
kubeClient, kubeInformers, m.GRPCCAKeyFile, m.GRPCCAFile, 720*time.Hour, controllerContext.EventRecorder)
208+
if err != nil {
209+
return err
210+
}
211+
drivers = append(drivers, grpcHubDriver)
198212
}
199213
}
200214
hubDriver := register.NewAggregatedHubDriver(drivers...)

pkg/registration/hub/manifests/rbac/managedcluster-registration-clusterrole.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ rules:
1616
# TODO for backward compatible, we do not limit the resource name
1717
# remove this after we no longer support lower versions kubernetes (less than 1.14)
1818
#resourceNames: ["managed-cluster-lease"]
19-
verbs: ["get", "update"]
19+
verbs: ["get", "list", "watch", "update"]
2020
# Allow agent to get/list/watch managed cluster addons
2121
- apiGroups: ["addon.open-cluster-management.io"]
2222
resources: ["managedclusteraddons"]
@@ -28,4 +28,4 @@ rules:
2828
# Allow agent to send events to the hub
2929
- apiGroups: ["events.k8s.io"]
3030
resources: ["events"]
31-
verbs: ["create"]
31+
verbs: ["list", "watch", "create"]

pkg/registration/hub/manifests/rbac/managedcluster-work-clusterrole.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ rules:
1313
# Allow work agent to send event to hub
1414
- apiGroups: ["", "events.k8s.io"]
1515
resources: ["events"]
16-
verbs: ["create", "patch", "update"]
16+
verbs: ["list", "watch", "create", "patch", "update"]
1717
# Allow work agent to get/list/watch/update manifestworks
1818
- apiGroups: ["work.open-cluster-management.io"]
1919
resources: ["manifestworks"]

pkg/registration/register/csr/csr.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@ import (
99
"math/rand"
1010
"os"
1111
"path"
12-
"reflect"
1312
"strings"
1413
"time"
1514

1615
"github.com/openshift/library-go/pkg/controller/factory"
1716
"github.com/openshift/library-go/pkg/operator/events"
1817
certificates "k8s.io/api/certificates/v1"
1918
corev1 "k8s.io/api/core/v1"
19+
"k8s.io/apimachinery/pkg/api/equality"
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("existing 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
@@ -296,6 +298,9 @@ func (c *CSRDriver) ManagedClusterDecorator(cluster *clusterv1.ManagedCluster) *
296298
}
297299

298300
func (c *CSRDriver) Fork(addonName string, secretOption register.SecretOption) register.RegisterDriver {
301+
if len(secretOption.Signer) == 0 {
302+
secretOption.Signer = certificates.KubeAPIServerClientSignerName
303+
}
299304
csrOption := &CSROption{
300305
ObjectMeta: metav1.ObjectMeta{
301306
GenerateName: fmt.Sprintf("addon-%s-%s-", secretOption.ClusterName, addonName),
@@ -349,23 +354,30 @@ func (c *CSRDriver) BuildClients(ctx context.Context, secretOption register.Secr
349354
return nil, fmt.Errorf("failed to create CSR control: %w", err)
350355
}
351356

352-
err = csrControl.Informer().AddIndexers(cache.Indexers{
357+
err = c.SetCSRControl(csrControl, secretOption.ClusterName)
358+
if err != nil {
359+
return nil, fmt.Errorf("failed to set CSR control: %w", err)
360+
}
361+
return clients, nil
362+
}
363+
364+
func (c *CSRDriver) SetCSRControl(control CSRControl, clusterName string) error {
365+
c.csrControl = control
366+
err := control.Informer().AddIndexers(cache.Indexers{
353367
indexByCluster: indexByClusterFunc,
354368
})
355369
if err != nil {
356-
return nil, err
370+
return err
357371
}
358372

359-
err = csrControl.Informer().AddIndexers(cache.Indexers{
373+
err = control.Informer().AddIndexers(cache.Indexers{
360374
indexByAddon: indexByAddonFunc,
361375
})
362376
if err != nil {
363-
utilruntime.HandleError(err)
377+
return err
364378
}
365-
366-
c.csrControl = csrControl
367-
c.haltCSRCreation = haltCSRCreationFunc(csrControl.Informer().GetIndexer(), secretOption.ClusterName)
368-
return clients, nil
379+
c.haltCSRCreation = haltCSRCreationFunc(control.Informer().GetIndexer(), clusterName)
380+
return nil
369381
}
370382

371383
var _ register.RegisterDriver = &CSRDriver{}
@@ -447,7 +459,7 @@ func shouldCreateCSR(
447459

448460
// b.client certificate is sensitive to the additional secret data and the data changes
449461
if err := hasAdditionalSecretData(additionalSecretData, secret); err != nil {
450-
recorder.Eventf("AdditonalSecretDataChanged", "The additional secret data is changed for %v. Re-create the client certificate for %s", err, controllerName)
462+
recorder.Eventf("AdditionalSecretDataChanged", "The additional secret data is changed for %v. Re-create the client certificate for %s", err, controllerName)
451463
return true, nil
452464
}
453465

@@ -481,7 +493,7 @@ func hasAdditionalSecretData(additionalSecretData map[string][]byte, secret *cor
481493
return fmt.Errorf("key %q not found in secret %q", k, secret.Namespace+"/"+secret.Name)
482494
}
483495

484-
if !reflect.DeepEqual(v, value) {
496+
if !equality.Semantic.DeepEqual(v, value) {
485497
return fmt.Errorf("key %q in secret %q does not match the expected value",
486498
k, secret.Namespace+"/"+secret.Name)
487499
}

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)