Skip to content

Commit ab9bbb0

Browse files
committed
use kubeconfig instead of gcp
1 parent 1a0628b commit ab9bbb0

File tree

8 files changed

+93
-172
lines changed

8 files changed

+93
-172
lines changed

Tiltfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,16 @@ FROM golang:1.18 as tilt-helper
102102
# Support live reloading with Tilt
103103
RUN wget --output-document /restart.sh --quiet https://raw.githubusercontent.com/windmilleng/rerun-process-wrapper/master/restart.sh && \
104104
wget --output-document /start.sh --quiet https://raw.githubusercontent.com/windmilleng/rerun-process-wrapper/master/start.sh && \
105-
chmod +x /start.sh && chmod +x /restart.sh
105+
chmod +x /start.sh && chmod +x /restart.sh && \
106+
touch /process.txt && chmod 0666 /process.txt `# pre-create PID file to allow even non-root users to run the image`
106107
"""
107108

108109
tilt_dockerfile_header = """
109110
FROM gcr.io/distroless/base:debug as tilt
110111
WORKDIR /
111112
COPY --from=tilt-helper /start.sh .
112113
COPY --from=tilt-helper /restart.sh .
114+
COPY --from=tilt-helper /process.txt .
113115
COPY manager .
114116
"""
115117

cloud/scope/clients.go

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -103,34 +103,6 @@ func newComputeService(ctx context.Context, credentialsRef *infrav1.ObjectRefere
103103
return computeSvc, nil
104104
}
105105

106-
func newTargetPoolsClient(ctx context.Context, credentialsRef *infrav1.ObjectReference, crClient client.Client) (*computerest.TargetPoolsClient, error) {
107-
opts, err := defaultClientOptions(ctx, credentialsRef, crClient)
108-
if err != nil {
109-
return nil, fmt.Errorf("getting default gcp client options: %w", err)
110-
}
111-
112-
targetPoolsClient, err := computerest.NewTargetPoolsRESTClient(ctx, opts...)
113-
if err != nil {
114-
return nil, errors.Errorf("failed to create target pools client: %v", err)
115-
}
116-
117-
return targetPoolsClient, nil
118-
}
119-
120-
func newForwardingRulesClient(ctx context.Context, credentialsRef *infrav1.ObjectReference, crClient client.Client) (*computerest.ForwardingRulesClient, error) {
121-
opts, err := defaultClientOptions(ctx, credentialsRef, crClient)
122-
if err != nil {
123-
return nil, fmt.Errorf("getting default gcp client options: %w", err)
124-
}
125-
126-
forwardingRulesClient, err := computerest.NewForwardingRulesRESTClient(ctx, opts...)
127-
if err != nil {
128-
return nil, errors.Errorf("failed to create gcp forwarding rules client: %v", err)
129-
}
130-
131-
return forwardingRulesClient, nil
132-
}
133-
134106
func newClusterManagerClient(ctx context.Context, credentialsRef *infrav1.ObjectReference, crClient client.Client) (*container.ClusterManagerClient, error) {
135107
opts, err := defaultClientOptions(ctx, credentialsRef, crClient)
136108
if err != nil {

cloud/scope/managedcontrolplane.go

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424

2525
"sigs.k8s.io/cluster-api/util/conditions"
2626

27-
compute "cloud.google.com/go/compute/apiv1"
2827
container "cloud.google.com/go/container/apiv1"
2928
credentials "cloud.google.com/go/iam/credentials/apiv1"
3029
resourcemanager "cloud.google.com/go/resourcemanager/apiv3"
@@ -44,8 +43,6 @@ const (
4443
// ManagedControlPlaneScopeParams defines the input parameters used to create a new Scope.
4544
type ManagedControlPlaneScopeParams struct {
4645
CredentialsClient *credentials.IamCredentialsClient
47-
TargetPoolsClient *compute.TargetPoolsClient
48-
ForwardingRulesClient *compute.ForwardingRulesClient
4946
ManagedClusterClient *container.ClusterManagerClient
5047
TagBindingsClient *resourcemanager.TagBindingsClient
5148
Client client.Client
@@ -72,30 +69,13 @@ func NewManagedControlPlaneScope(ctx context.Context, params ManagedControlPlane
7269
return nil, fmt.Errorf("getting gcp credentials: %w", err)
7370
}
7471

75-
if params.TargetPoolsClient == nil {
76-
targetPoolsClient, err := newTargetPoolsClient(ctx, params.GCPManagedCluster.Spec.CredentialsRef, params.Client)
77-
if err != nil {
78-
return nil, errors.Errorf("failed to create gcp target pools client: %v", err)
79-
}
80-
params.TargetPoolsClient = targetPoolsClient
81-
}
82-
83-
if params.ForwardingRulesClient == nil {
84-
forwardingRulesClient, err := newForwardingRulesClient(ctx, params.GCPManagedCluster.Spec.CredentialsRef, params.Client)
85-
if err != nil {
86-
return nil, errors.Errorf("failed to create gcp forwarding rules client: %v", err)
87-
}
88-
params.ForwardingRulesClient = forwardingRulesClient
89-
}
90-
9172
if params.ManagedClusterClient == nil {
9273
managedClusterClient, err := newClusterManagerClient(ctx, params.GCPManagedCluster.Spec.CredentialsRef, params.Client)
9374
if err != nil {
9475
return nil, errors.Errorf("failed to create gcp managed cluster client: %v", err)
9576
}
9677
params.ManagedClusterClient = managedClusterClient
9778
}
98-
9979
if params.TagBindingsClient == nil {
10080
tagBindingsClient, err := newTagBindingsClient(ctx, params.GCPManagedCluster.Spec.CredentialsRef, params.Client, params.GCPManagedCluster.Spec.Region)
10181
if err != nil {
@@ -122,8 +102,6 @@ func NewManagedControlPlaneScope(ctx context.Context, params ManagedControlPlane
122102
Cluster: params.Cluster,
123103
GCPManagedCluster: params.GCPManagedCluster,
124104
GCPManagedControlPlane: params.GCPManagedControlPlane,
125-
tpClient: params.TargetPoolsClient,
126-
frClient: params.ForwardingRulesClient,
127105
mcClient: params.ManagedClusterClient,
128106
tagBindingsClient: params.TagBindingsClient,
129107
credentialsClient: params.CredentialsClient,
@@ -140,8 +118,6 @@ type ManagedControlPlaneScope struct {
140118
Cluster *clusterv1.Cluster
141119
GCPManagedCluster *infrav1exp.GCPManagedCluster
142120
GCPManagedControlPlane *infrav1exp.GCPManagedControlPlane
143-
tpClient *compute.TargetPoolsClient
144-
frClient *compute.ForwardingRulesClient
145121
mcClient *container.ClusterManagerClient
146122
tagBindingsClient *resourcemanager.TagBindingsClient
147123
credentialsClient *credentials.IamCredentialsClient
@@ -166,8 +142,6 @@ func (s *ManagedControlPlaneScope) PatchObject() error {
166142

167143
// Close closes the current scope persisting the managed control plane configuration and status.
168144
func (s *ManagedControlPlaneScope) Close() error {
169-
s.tpClient.Close()
170-
s.frClient.Close()
171145
s.mcClient.Close()
172146
s.tagBindingsClient.Close()
173147
s.credentialsClient.Close()
@@ -184,16 +158,6 @@ func (s *ManagedControlPlaneScope) Client() client.Client {
184158
return s.client
185159
}
186160

187-
// TargetPoolsClient returns a client used to interact with google compute target pools.
188-
func (s *ManagedControlPlaneScope) TargetPoolsClient() *compute.TargetPoolsClient {
189-
return s.tpClient
190-
}
191-
192-
// ForwardingRulesClient returns a client used to interact with google compute forwarding rules.
193-
func (s *ManagedControlPlaneScope) ForwardingRulesClient() *compute.ForwardingRulesClient {
194-
return s.frClient
195-
}
196-
197161
// ManagedControlPlaneClient returns a client used to interact with GKE.
198162
func (s *ManagedControlPlaneScope) ManagedControlPlaneClient() *container.ClusterManagerClient {
199163
return s.mcClient

cloud/services/container/clusters/kubeconfig.go

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -41,34 +41,35 @@ const (
4141
GkeScope = "https://www.googleapis.com/auth/cloud-platform"
4242
)
4343

44-
func (s *Service) reconcileKubeconfig(ctx context.Context, cluster *containerpb.Cluster, log *logr.Logger) error {
44+
func (s *Service) reconcileKubeconfig(ctx context.Context, cluster *containerpb.Cluster, log *logr.Logger) (clientcmd.ClientConfig, error) {
4545
log.Info("Reconciling kubeconfig")
4646
clusterRef := types.NamespacedName{
4747
Name: s.scope.Cluster.Name,
4848
Namespace: s.scope.Cluster.Namespace,
4949
}
50+
var kubeConfig *api.Config
5051

5152
configSecret, err := secret.GetFromNamespacedName(ctx, s.scope.Client(), clusterRef, secret.Kubeconfig)
5253
if err != nil {
5354
if !apierrors.IsNotFound(err) {
5455
log.Error(err, "getting kubeconfig secret", "name", clusterRef)
55-
return fmt.Errorf("getting kubeconfig secret %s: %w", clusterRef, err)
56+
return nil, fmt.Errorf("getting kubeconfig secret %s: %w", clusterRef, err)
5657
}
5758
log.Info("kubeconfig secret not found, creating")
5859

59-
if createErr := s.createCAPIKubeconfigSecret(
60+
if kubeConfig, err = s.createCAPIKubeconfigSecret(
6061
ctx,
6162
cluster,
6263
&clusterRef,
6364
log,
64-
); createErr != nil {
65-
return fmt.Errorf("creating kubeconfig secret: %w", createErr)
65+
); err != nil {
66+
return nil, fmt.Errorf("creating kubeconfig secret: %w", err)
6667
}
67-
} else if updateErr := s.updateCAPIKubeconfigSecret(ctx, configSecret); updateErr != nil {
68-
return fmt.Errorf("updating kubeconfig secret: %w", err)
68+
} else if kubeConfig, err = s.updateCAPIKubeconfigSecret(ctx, configSecret); err != nil {
69+
return nil, fmt.Errorf("updating kubeconfig secret: %w", err)
6970
}
7071

71-
return nil
72+
return clientcmd.NewDefaultClientConfig(*kubeConfig, nil), nil
7273
}
7374

7475
func (s *Service) reconcileAdditionalKubeconfigs(ctx context.Context, cluster *containerpb.Cluster, log *logr.Logger) error {
@@ -133,21 +134,21 @@ func (s *Service) createUserKubeconfigSecret(ctx context.Context, cluster *conta
133134
return nil
134135
}
135136

136-
func (s *Service) createCAPIKubeconfigSecret(ctx context.Context, cluster *containerpb.Cluster, clusterRef *types.NamespacedName, log *logr.Logger) error {
137+
func (s *Service) createCAPIKubeconfigSecret(ctx context.Context, cluster *containerpb.Cluster, clusterRef *types.NamespacedName, log *logr.Logger) (*api.Config, error) {
137138
controllerOwnerRef := *metav1.NewControllerRef(s.scope.GCPManagedControlPlane, infrav1exp.GroupVersion.WithKind("GCPManagedControlPlane"))
138139

139140
contextName := s.getKubeConfigContextName(false)
140141

141142
cfg, err := s.createBaseKubeConfig(contextName, cluster)
142143
if err != nil {
143144
log.Error(err, "failed creating base config")
144-
return fmt.Errorf("creating base kubeconfig: %w", err)
145+
return nil, fmt.Errorf("creating base kubeconfig: %w", err)
145146
}
146147

147148
token, err := s.generateToken(ctx)
148149
if err != nil {
149150
log.Error(err, "failed generating token")
150-
return err
151+
return nil, err
151152
}
152153
cfg.AuthInfos = map[string]*api.AuthInfo{
153154
contextName: {
@@ -158,50 +159,50 @@ func (s *Service) createCAPIKubeconfigSecret(ctx context.Context, cluster *conta
158159
out, err := clientcmd.Write(*cfg)
159160
if err != nil {
160161
log.Error(err, "failed serializing kubeconfig to yaml")
161-
return fmt.Errorf("serialize kubeconfig to yaml: %w", err)
162+
return nil, fmt.Errorf("serialize kubeconfig to yaml: %w", err)
162163
}
163164

164165
kubeconfigSecret := kubeconfig.GenerateSecretWithOwner(*clusterRef, out, controllerOwnerRef)
165166
if err := s.scope.Client().Create(ctx, kubeconfigSecret); err != nil {
166167
log.Error(err, "failed creating secret")
167-
return fmt.Errorf("creating secret: %w", err)
168+
return nil, fmt.Errorf("creating secret: %w", err)
168169
}
169170

170-
return nil
171+
return cfg, nil
171172
}
172173

173-
func (s *Service) updateCAPIKubeconfigSecret(ctx context.Context, configSecret *corev1.Secret) error {
174+
func (s *Service) updateCAPIKubeconfigSecret(ctx context.Context, configSecret *corev1.Secret) (*api.Config, error) {
174175
data, ok := configSecret.Data[secret.KubeconfigDataName]
175176
if !ok {
176-
return errors.Errorf("missing key %q in secret data", secret.KubeconfigDataName)
177+
return nil, errors.Errorf("missing key %q in secret data", secret.KubeconfigDataName)
177178
}
178179

179180
config, err := clientcmd.Load(data)
180181
if err != nil {
181-
return errors.Wrap(err, "failed to convert kubeconfig Secret into a clientcmdapi.Config")
182+
return nil, errors.Wrap(err, "failed to convert kubeconfig Secret into a clientcmdapi.Config")
182183
}
183184

184185
token, err := s.generateToken(ctx)
185186
if err != nil {
186-
return err
187+
return nil, err
187188
}
188189

189190
contextName := s.getKubeConfigContextName(false)
190191
config.AuthInfos[contextName].Token = token
191192

192193
out, err := clientcmd.Write(*config)
193194
if err != nil {
194-
return errors.Wrap(err, "failed to serialize config to yaml")
195+
return nil, errors.Wrap(err, "failed to serialize config to yaml")
195196
}
196197

197198
configSecret.Data[secret.KubeconfigDataName] = out
198199

199200
err = s.scope.Client().Update(ctx, configSecret)
200201
if err != nil {
201-
return fmt.Errorf("updating kubeconfig secret: %w", err)
202+
return nil, fmt.Errorf("updating kubeconfig secret: %w", err)
202203
}
203204

204-
return nil
205+
return config, nil
205206
}
206207

207208
func (s *Service) getKubeConfigContextName(isUser bool) string {

0 commit comments

Comments
 (0)