Skip to content

Commit eba6759

Browse files
committed
Add reconciler logic for server, peer certificate
This commit will add reconciler logic for creating server, peer certificate for each of the etcd member pods. Signed-off-by: ArkaSaha30 <[email protected]>
1 parent c6c5ffa commit eba6759

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

config/rbac/role.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ rules:
2828
- list
2929
- patch
3030
- update
31+
- apiGroups:
32+
- ""
33+
resources:
34+
- pods
35+
verbs:
36+
- get
37+
- list
38+
- watch
3139
- apiGroups:
3240
- apps
3341
resources:

internal/controller/etcdcluster_controller.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ type EtcdClusterReconciler struct {
5656
// +kubebuilder:rbac:groups=core,resources=configmaps,verbs=get;list;watch;create;update;patch;delete
5757
// +kubebuilder:rbac:groups="",resources=events,verbs=create;patch;get;list;update
5858
// +kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;watch;create;patch;update;delete
59+
// +kubebuilder:rbac:groups="",resources=pods,verbs=get;list;watch
5960
// +kubebuilder:rbac:groups="cert-manager.io",resources=certificates,verbs=get;list;watch;create;patch;update;delete
6061
// +kubebuilder:rbac:groups="cert-manager.io",resources=clusterissuers,verbs=get;list;watch
6162
// +kubebuilder:rbac:groups="cert-manager.io",resources=issuers,verbs=get;list;watch
@@ -117,6 +118,17 @@ func (r *EtcdClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request)
117118
}
118119
}
119120

121+
// Create Server and Peer Certificate for etcd-operator to communicate within the members
122+
if etcdCluster.Spec.TLS != nil {
123+
createServerPeerCertErr := r.checkServerPeerCertificate(etcdCluster, sts, ctx)
124+
if createServerPeerCertErr != nil {
125+
logger.Error(createServerPeerCertErr, "Error creating Server or Peer Certificate")
126+
}
127+
} else {
128+
// TODO: instead of logging error, set default autoConfig
129+
logger.Error(fmt.Errorf("missing TLS config for %s", etcdCluster.Name), "certificates cannot be created")
130+
}
131+
120132
// If the Statefulsets is not controlled by this EtcdCluster resource, we should log
121133
// a warning to the event recorder and return error msg.
122134
err = checkStatefulSetControlledByEtcdOperator(etcdCluster, sts)

internal/controller/utils.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,15 @@ func healthCheck(sts *appsv1.StatefulSet, lg klog.Logger) (*clientv3.MemberListR
528528
return memberlistResp, healthInfos, nil
529529
}
530530

531+
func (r *EtcdClusterReconciler) getStatefulSetPods(sts *appsv1.StatefulSet, ctx context.Context) (*corev1.PodList, error) {
532+
podList := corev1.PodList{}
533+
err := r.Client.List(ctx, &podList, client.InNamespace(sts.Namespace), client.MatchingLabels(sts.Spec.Selector.MatchLabels))
534+
if err != nil {
535+
return nil, err
536+
}
537+
return &podList, nil
538+
}
539+
531540
func createCMCertificateConfig(ec *ecv1alpha1.ProviderCertManagerConfig) *certInterface.Config {
532541
duration, err := time.ParseDuration(ec.ValidityDuration)
533542
if err != nil {
@@ -604,3 +613,19 @@ func (r *EtcdClusterReconciler) checkClientCertificate(ec *ecv1alpha1.EtcdCluste
604613
createClientCertErr := r.createCertificate(ec, ctx, certName)
605614
return createClientCertErr
606615
}
616+
617+
func (r *EtcdClusterReconciler) checkServerPeerCertificate(ec *ecv1alpha1.EtcdCluster, sts *appsv1.StatefulSet, ctx context.Context) error {
618+
podList, podListErr := r.getStatefulSetPods(sts, ctx)
619+
if podListErr != nil {
620+
return podListErr
621+
}
622+
for _, pod := range podList.Items {
623+
serverCertName := fmt.Sprintf("%s-%s-tls", pod.Name, "server")
624+
peerCertName := fmt.Sprintf("%s-%s-tls", pod.Name, "peer")
625+
createServerCertErr := r.createCertificate(ec, ctx, serverCertName)
626+
log.Println(createServerCertErr)
627+
createPeerCertErr := r.createCertificate(ec, ctx, peerCertName)
628+
log.Println(createPeerCertErr)
629+
}
630+
return nil
631+
}

0 commit comments

Comments
 (0)