Skip to content

Commit 93dc342

Browse files
Merge pull request #317 from bharath-b-rh/cm-639
CM-639: Adds metrics service creation for istio-csr
2 parents d5ebd19 + 7d2707f commit 93dc342

File tree

11 files changed

+112
-76
lines changed

11 files changed

+112
-76
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: cert-manager-istio-csr-metrics
5+
namespace: cert-manager
6+
labels:
7+
app: cert-manager-istio-csr-metrics
8+
app.kubernetes.io/name: cert-manager-istio-csr
9+
app.kubernetes.io/instance: cert-manager-istio-csr
10+
app.kubernetes.io/version: v0.14.2
11+
app.kubernetes.io/managed-by: cert-manager-operator
12+
spec:
13+
type: ClusterIP
14+
ports:
15+
- port: 9402
16+
targetPort: 9402
17+
protocol: TCP
18+
name: metrics
19+
selector:
20+
app: cert-manager-istio-csr

hack/update-istio-csr-manifests.sh

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@ mkdir -p bindata/istio-csr
4040
kind=$(echo "$item" | ./bin/yq eval '.kind' - | tr '[:upper:]' '[:lower:]')
4141

4242
# skip unused manifests
43-
if [[ "${name}-${kind}" == "cert-manager-istio-csr-metrics-service" || \
44-
"${name}-${kind}" == "cert-manager-istio-csr-dynamic-istiod-rolebinding" \
45-
]]; then
46-
43+
if [[ "${name}-${kind}" == "cert-manager-istio-csr-dynamic-istiod-rolebinding" ]]; then
4744
continue
4845
fi
4946

pkg/controller/istiocsr/certificates.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55

66
corev1 "k8s.io/api/core/v1"
77
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8-
"k8s.io/apimachinery/pkg/types"
8+
"sigs.k8s.io/controller-runtime/pkg/client"
99

1010
certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
1111
certmanagermetav1 "github.com/cert-manager/cert-manager/pkg/apis/meta/v1"
@@ -23,11 +23,7 @@ func (r *Reconciler) createOrApplyCertificates(istiocsr *v1alpha1.IstioCSR, reso
2323
certificateName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
2424
r.log.V(4).Info("reconciling certificate resource", "name", certificateName)
2525
fetched := &certmanagerv1.Certificate{}
26-
key := types.NamespacedName{
27-
Name: desired.GetName(),
28-
Namespace: desired.GetNamespace(),
29-
}
30-
exist, err := r.Exists(r.ctx, key, fetched)
26+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
3127
if err != nil {
3228
return FromClientError(err, "failed to check %s certificate resource already exists", certificateName)
3329
}

pkg/controller/istiocsr/client.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"reflect"
77

88
"k8s.io/apimachinery/pkg/api/errors"
9-
"k8s.io/apimachinery/pkg/types"
109
"k8s.io/client-go/util/retry"
1110

1211
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -74,7 +73,7 @@ func (c *ctrlClientImpl) Update(
7473
func (c *ctrlClientImpl) UpdateWithRetry(
7574
ctx context.Context, obj client.Object, opts ...client.UpdateOption,
7675
) error {
77-
key := types.NamespacedName{Name: obj.GetName(), Namespace: obj.GetNamespace()}
76+
key := client.ObjectKeyFromObject(obj)
7877
if err := retry.RetryOnConflict(retry.DefaultRetry, func() error {
7978
current := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(client.Object)
8079
if err := c.Client.Get(ctx, key, current); err != nil {

pkg/controller/istiocsr/constants.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ const (
111111
roleBindingAssetName = "istio-csr/cert-manager-istio-csr-rolebinding.yaml"
112112
roleBindingLeasesAssetName = "istio-csr/cert-manager-istio-csr-leases-rolebinding.yaml"
113113
serviceAssetName = "istio-csr/cert-manager-istio-csr-service.yaml"
114+
metricsServiceAssetName = "istio-csr/cert-manager-istio-csr-metrics-service.yaml"
114115
serviceAccountAssetName = "istio-csr/cert-manager-istio-csr-serviceaccount.yaml"
115116
)
116117

pkg/controller/istiocsr/deployments.go

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,9 @@ import (
1111
corev1 "k8s.io/api/core/v1"
1212
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1313
metav1validation "k8s.io/apimachinery/pkg/apis/meta/v1/validation"
14-
"k8s.io/apimachinery/pkg/types"
1514
"k8s.io/apimachinery/pkg/util/validation/field"
1615
"k8s.io/kubernetes/pkg/apis/core"
1716
corevalidation "k8s.io/kubernetes/pkg/apis/core/validation"
18-
1917
"sigs.k8s.io/controller-runtime/pkg/client"
2018

2119
certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
@@ -39,11 +37,7 @@ func (r *Reconciler) createOrApplyDeployments(istiocsr *v1alpha1.IstioCSR, resou
3937
deploymentName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
4038
r.log.V(4).Info("reconciling deployment resource", "name", deploymentName)
4139
fetched := &appsv1.Deployment{}
42-
key := types.NamespacedName{
43-
Name: desired.GetName(),
44-
Namespace: desired.GetNamespace(),
45-
}
46-
exist, err := r.Exists(r.ctx, key, fetched)
40+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
4741
if err != nil {
4842
return FromClientError(err, "failed to check %s deployment resource already exists", deploymentName)
4943
}
@@ -336,7 +330,7 @@ func updateVolumeWithIssuerCA(deployment *appsv1.Deployment) {
336330

337331
func (r *Reconciler) getIssuer(istiocsr *v1alpha1.IstioCSR) (client.Object, error) {
338332
issuerRefKind := strings.ToLower(istiocsr.Spec.IstioCSRConfig.CertManager.IssuerRef.Kind)
339-
namespacedName := types.NamespacedName{
333+
key := client.ObjectKey{
340334
Name: istiocsr.Spec.IstioCSRConfig.CertManager.IssuerRef.Name,
341335
Namespace: istiocsr.Spec.IstioCSRConfig.Istio.Namespace,
342336
}
@@ -349,8 +343,8 @@ func (r *Reconciler) getIssuer(istiocsr *v1alpha1.IstioCSR) (client.Object, erro
349343
object = &certmanagerv1.Issuer{}
350344
}
351345

352-
if err := r.Get(r.ctx, namespacedName, object); err != nil {
353-
return nil, fmt.Errorf("failed to fetch %q issuer: %w", namespacedName, err)
346+
if err := r.Get(r.ctx, key, object); err != nil {
347+
return nil, fmt.Errorf("failed to fetch %q issuer: %w", key, err)
354348
}
355349
return object, nil
356350
}
@@ -360,7 +354,7 @@ func (r *Reconciler) createCAConfigMap(istiocsr *v1alpha1.IstioCSR, issuerConfig
360354
return nil
361355
}
362356

363-
secretKey := types.NamespacedName{
357+
secretKey := client.ObjectKey{
364358
Name: issuerConfig.CA.SecretName,
365359
Namespace: istiocsr.Spec.IstioCSRConfig.Istio.Namespace,
366360
}
@@ -372,7 +366,7 @@ func (r *Reconciler) createCAConfigMap(istiocsr *v1alpha1.IstioCSR, issuerConfig
372366
return err
373367
}
374368

375-
configmapKey := types.NamespacedName{
369+
configmapKey := client.ObjectKey{
376370
Name: istiocsrCAConfigMapName,
377371
Namespace: istiocsr.GetNamespace(),
378372
}

pkg/controller/istiocsr/rbacs.go

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import (
55

66
corev1 "k8s.io/api/core/v1"
77
rbacv1 "k8s.io/api/rbac/v1"
8-
"k8s.io/apimachinery/pkg/types"
9-
108
"sigs.k8s.io/controller-runtime/pkg/client"
119

1210
"github.com/openshift/cert-manager-operator/api/operator/v1alpha1"
@@ -61,14 +59,14 @@ func (r *Reconciler) createOrApplyClusterRoles(istiocsr *v1alpha1.IstioCSR, reso
6159
exist bool
6260
err error
6361
roleName string
64-
key types.NamespacedName
62+
key client.ObjectKey
6563
fetched = &rbacv1.ClusterRole{}
6664
)
6765
r.log.V(4).Info("reconciling clusterrole resource created for istiocsr", "namespace", istiocsr.GetNamespace(), "name", istiocsr.GetName())
6866
if istiocsr.Status.ClusterRole != "" {
6967
roleName = fmt.Sprintf("%s/%s", desired.GetNamespace(), istiocsr.Status.ClusterRole)
7068
fetched = &rbacv1.ClusterRole{}
71-
key = types.NamespacedName{
69+
key = client.ObjectKey{
7270
Name: istiocsr.Status.ClusterRole,
7371
Namespace: desired.GetNamespace(),
7472
}
@@ -154,14 +152,14 @@ func (r *Reconciler) createOrApplyClusterRoleBindings(istiocsr *v1alpha1.IstioCS
154152
exist bool
155153
err error
156154
roleBindingName string
157-
key types.NamespacedName
155+
key client.ObjectKey
158156
fetched = &rbacv1.ClusterRoleBinding{}
159157
)
160158
r.log.V(4).Info("reconciling clusterrolebinding resource created for istiocsr", "namespace", istiocsr.GetNamespace(), "name", istiocsr.GetName())
161159
if istiocsr.Status.ClusterRoleBinding != "" {
162160
roleBindingName = fmt.Sprintf("%s/%s", desired.GetNamespace(), istiocsr.Status.ClusterRoleBinding)
163161
fetched = &rbacv1.ClusterRoleBinding{}
164-
key = types.NamespacedName{
162+
key = client.ObjectKey{
165163
Name: istiocsr.Status.ClusterRoleBinding,
166164
Namespace: desired.GetNamespace(),
167165
}
@@ -243,11 +241,7 @@ func (r *Reconciler) createOrApplyRoles(istiocsr *v1alpha1.IstioCSR, resourceLab
243241
roleName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
244242
r.log.V(4).Info("reconciling role resource", "name", roleName)
245243
fetched := &rbacv1.Role{}
246-
key := types.NamespacedName{
247-
Name: desired.GetName(),
248-
Namespace: desired.GetNamespace(),
249-
}
250-
exist, err := r.Exists(r.ctx, key, fetched)
244+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
251245
if err != nil {
252246
return FromClientError(err, "failed to check %s role resource already exists", roleName)
253247
}
@@ -287,11 +281,7 @@ func (r *Reconciler) createOrApplyRoleBindings(istiocsr *v1alpha1.IstioCSR, serv
287281
roleBindingName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
288282
r.log.V(4).Info("reconciling rolebinding resource", "name", roleBindingName)
289283
fetched := &rbacv1.RoleBinding{}
290-
key := types.NamespacedName{
291-
Name: desired.GetName(),
292-
Namespace: desired.GetNamespace(),
293-
}
294-
exist, err := r.Exists(r.ctx, key, fetched)
284+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
295285
if err != nil {
296286
return FromClientError(err, "failed to check %s rolebinding resource already exists", roleBindingName)
297287
}
@@ -333,11 +323,7 @@ func (r *Reconciler) createOrApplyRoleForLeases(istiocsr *v1alpha1.IstioCSR, res
333323
roleName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
334324
r.log.V(4).Info("reconciling role for lease resource", "name", roleName)
335325
fetched := &rbacv1.Role{}
336-
key := types.NamespacedName{
337-
Name: desired.GetName(),
338-
Namespace: desired.GetNamespace(),
339-
}
340-
exist, err := r.Exists(r.ctx, key, fetched)
326+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
341327
if err != nil {
342328
return FromClientError(err, "failed to check %s role resource already exists", roleName)
343329
}
@@ -377,11 +363,7 @@ func (r *Reconciler) createOrApplyRoleBindingForLeases(istiocsr *v1alpha1.IstioC
377363
roleBindingName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
378364
r.log.V(4).Info("reconciling rolebinding for lease resource", "name", roleBindingName)
379365
fetched := &rbacv1.RoleBinding{}
380-
key := types.NamespacedName{
381-
Name: desired.GetName(),
382-
Namespace: desired.GetNamespace(),
383-
}
384-
exist, err := r.Exists(r.ctx, key, fetched)
366+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
385367
if err != nil {
386368
return FromClientError(err, "failed to check %s rolebinding resource already exists", roleBindingName)
387369
}

pkg/controller/istiocsr/serviceaccounts.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"fmt"
55

66
corev1 "k8s.io/api/core/v1"
7-
"k8s.io/apimachinery/pkg/types"
7+
"sigs.k8s.io/controller-runtime/pkg/client"
88

99
"github.com/openshift/cert-manager-operator/api/operator/v1alpha1"
1010
"github.com/openshift/cert-manager-operator/pkg/operator/assets"
@@ -16,11 +16,7 @@ func (r *Reconciler) createOrApplyServiceAccounts(istiocsr *v1alpha1.IstioCSR, r
1616
serviceAccountName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
1717
r.log.V(4).Info("reconciling serviceaccount resource", "name", serviceAccountName)
1818
fetched := &corev1.ServiceAccount{}
19-
key := types.NamespacedName{
20-
Name: desired.GetName(),
21-
Namespace: desired.GetNamespace(),
22-
}
23-
exist, err := r.Exists(r.ctx, key, fetched)
19+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
2420
if err != nil {
2521
return FromClientError(err, "failed to check %s serviceaccount resource already exists", serviceAccountName)
2622
}

pkg/controller/istiocsr/services.go

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"fmt"
55

66
corev1 "k8s.io/api/core/v1"
7-
"k8s.io/apimachinery/pkg/types"
7+
"sigs.k8s.io/controller-runtime/pkg/client"
88

99
"github.com/openshift/cert-manager-operator/api/operator/v1alpha1"
1010
"github.com/openshift/cert-manager-operator/pkg/operator/assets"
@@ -16,42 +16,48 @@ const (
1616
)
1717

1818
func (r *Reconciler) createOrApplyServices(istiocsr *v1alpha1.IstioCSR, resourceLabels map[string]string, istioCSRCreateRecon bool) error {
19-
desired := r.getServiceObject(istiocsr, resourceLabels)
19+
service := r.getServiceObject(istiocsr, resourceLabels)
20+
if err := r.createOrApplyService(istiocsr, service, istioCSRCreateRecon); err != nil {
21+
return err
22+
}
23+
if err := r.updateGRPCEndpointInStatus(istiocsr, service); err != nil {
24+
return FromClientError(err, "failed to update %s/%s istiocsr status with %s service endpoint info", istiocsr.GetNamespace(), istiocsr.GetName(), service.GetName())
25+
}
2026

21-
serviceName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
27+
metricsService := r.getMetricsServiceObject(istiocsr, resourceLabels)
28+
if err := r.createOrApplyService(istiocsr, metricsService, istioCSRCreateRecon); err != nil {
29+
return err
30+
}
31+
return nil
32+
}
33+
34+
func (r *Reconciler) createOrApplyService(istiocsr *v1alpha1.IstioCSR, svc *corev1.Service, istioCSRCreateRecon bool) error {
35+
serviceName := fmt.Sprintf("%s/%s", svc.GetNamespace(), svc.GetName())
2236
r.log.V(4).Info("reconciling service resource", "name", serviceName)
2337
fetched := &corev1.Service{}
24-
key := types.NamespacedName{
25-
Name: desired.GetName(),
26-
Namespace: desired.GetNamespace(),
27-
}
28-
exist, err := r.Exists(r.ctx, key, fetched)
38+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(svc), fetched)
2939
if err != nil {
3040
return FromClientError(err, "failed to check %s service resource already exists", serviceName)
3141
}
3242

3343
if exist && istioCSRCreateRecon {
3444
r.eventRecorder.Eventf(istiocsr, corev1.EventTypeWarning, "ResourceAlreadyExists", "%s service resource already exists, maybe from previous installation", serviceName)
3545
}
36-
if exist && hasObjectChanged(desired, fetched) {
46+
if exist && hasObjectChanged(svc, fetched) {
3747
r.log.V(1).Info("service has been modified, updating to desired state", "name", serviceName)
38-
if err := r.UpdateWithRetry(r.ctx, desired); err != nil {
48+
if err := r.UpdateWithRetry(r.ctx, svc); err != nil {
3949
return FromClientError(err, "failed to update %s service resource", serviceName)
4050
}
4151
r.eventRecorder.Eventf(istiocsr, corev1.EventTypeNormal, "Reconciled", "service resource %s reconciled back to desired state", serviceName)
4252
} else {
4353
r.log.V(4).Info("service resource already exists and is in expected state", "name", serviceName)
4454
}
4555
if !exist {
46-
if err := r.Create(r.ctx, desired); err != nil {
56+
if err := r.Create(r.ctx, svc); err != nil {
4757
return FromClientError(err, "failed to create %s service resource", serviceName)
4858
}
4959
r.eventRecorder.Eventf(istiocsr, corev1.EventTypeNormal, "Reconciled", "service resource %s created", serviceName)
5060
}
51-
52-
if err := r.updateGRPCEndpointInStatus(istiocsr, desired); err != nil {
53-
return FromClientError(err, "failed to update %s/%s istiocsr status with %s service endpoint info", istiocsr.GetNamespace(), istiocsr.GetName(), serviceName)
54-
}
5561
return nil
5662
}
5763

@@ -65,6 +71,13 @@ func (r *Reconciler) getServiceObject(istiocsr *v1alpha1.IstioCSR, resourceLabel
6571
return service
6672
}
6773

74+
func (r *Reconciler) getMetricsServiceObject(istiocsr *v1alpha1.IstioCSR, resourceLabels map[string]string) *corev1.Service {
75+
service := decodeServiceObjBytes(assets.MustAsset(metricsServiceAssetName))
76+
updateNamespace(service, istiocsr.GetNamespace())
77+
updateResourceLabels(service, resourceLabels)
78+
return service
79+
}
80+
6881
func updateServicePort(service *corev1.Service, port int32) {
6982
for i, servicePort := range service.Spec.Ports {
7083
if servicePort.Name == grpcServicePortName && port != 0 {

pkg/controller/istiocsr/utils.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,8 @@ import (
1111
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1212
"k8s.io/apimachinery/pkg/runtime"
1313
"k8s.io/apimachinery/pkg/runtime/serializer"
14-
"k8s.io/apimachinery/pkg/types"
1514
utilerrors "k8s.io/apimachinery/pkg/util/errors"
1615
"k8s.io/client-go/util/retry"
17-
1816
"sigs.k8s.io/controller-runtime/pkg/client"
1917
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2018

@@ -45,7 +43,7 @@ func init() {
4543

4644
// updateStatus is for updating the status subresource of istiocsr.openshift.operator.io.
4745
func (r *Reconciler) updateStatus(ctx context.Context, changed *v1alpha1.IstioCSR) error {
48-
namespacedName := types.NamespacedName{Name: changed.Name, Namespace: changed.Namespace}
46+
namespacedName := client.ObjectKeyFromObject(changed)
4947
if err := retry.RetryOnConflict(retry.DefaultRetry, func() error {
5048
r.log.V(4).Info("updating istiocsr.openshift.operator.io status", "request", namespacedName)
5149
current := &v1alpha1.IstioCSR{}
@@ -68,7 +66,7 @@ func (r *Reconciler) updateStatus(ctx context.Context, changed *v1alpha1.IstioCS
6866

6967
// addFinalizer adds finalizer to istiocsr.openshift.operator.io resource.
7068
func (r *Reconciler) addFinalizer(ctx context.Context, istiocsr *v1alpha1.IstioCSR) error {
71-
namespacedName := types.NamespacedName{Name: istiocsr.Name, Namespace: istiocsr.Namespace}
69+
namespacedName := client.ObjectKeyFromObject(istiocsr)
7270
if !controllerutil.ContainsFinalizer(istiocsr, finalizer) {
7371
if !controllerutil.AddFinalizer(istiocsr, finalizer) {
7472
return fmt.Errorf("failed to create %q istiocsr.openshift.operator.io object with finalizers added", namespacedName)
@@ -91,7 +89,7 @@ func (r *Reconciler) addFinalizer(ctx context.Context, istiocsr *v1alpha1.IstioC
9189

9290
// removeFinalizer removes finalizers added to istiocsr.openshift.operator.io resource.
9391
func (r *Reconciler) removeFinalizer(ctx context.Context, istiocsr *v1alpha1.IstioCSR, finalizer string) error {
94-
namespacedName := types.NamespacedName{Name: istiocsr.Name, Namespace: istiocsr.Namespace}
92+
namespacedName := client.ObjectKeyFromObject(istiocsr)
9593
if controllerutil.ContainsFinalizer(istiocsr, finalizer) {
9694
if !controllerutil.RemoveFinalizer(istiocsr, finalizer) {
9795
return fmt.Errorf("failed to create %q istiocsr.openshift.operator.io object with finalizers removed", namespacedName)

0 commit comments

Comments
 (0)