Skip to content

Commit 149f25e

Browse files
committed
CM-639: Adds metrics service creation for istio-csr
1 parent baafb49 commit 149f25e

File tree

11 files changed

+103
-65
lines changed

11 files changed

+103
-65
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: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import (
1515
"k8s.io/apimachinery/pkg/util/validation/field"
1616
"k8s.io/kubernetes/pkg/apis/core"
1717
corevalidation "k8s.io/kubernetes/pkg/apis/core/validation"
18-
1918
"sigs.k8s.io/controller-runtime/pkg/client"
2019

2120
certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
@@ -39,11 +38,7 @@ func (r *Reconciler) createOrApplyDeployments(istiocsr *v1alpha1.IstioCSR, resou
3938
deploymentName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
4039
r.log.V(4).Info("reconciling deployment resource", "name", deploymentName)
4140
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)
41+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
4742
if err != nil {
4843
return FromClientError(err, "failed to check %s deployment resource already exists", deploymentName)
4944
}

pkg/controller/istiocsr/rbacs.go

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
corev1 "k8s.io/api/core/v1"
77
rbacv1 "k8s.io/api/rbac/v1"
88
"k8s.io/apimachinery/pkg/types"
9-
109
"sigs.k8s.io/controller-runtime/pkg/client"
1110

1211
"github.com/openshift/cert-manager-operator/api/operator/v1alpha1"
@@ -243,11 +242,7 @@ func (r *Reconciler) createOrApplyRoles(istiocsr *v1alpha1.IstioCSR, resourceLab
243242
roleName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
244243
r.log.V(4).Info("reconciling role resource", "name", roleName)
245244
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)
245+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
251246
if err != nil {
252247
return FromClientError(err, "failed to check %s role resource already exists", roleName)
253248
}
@@ -287,11 +282,7 @@ func (r *Reconciler) createOrApplyRoleBindings(istiocsr *v1alpha1.IstioCSR, serv
287282
roleBindingName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
288283
r.log.V(4).Info("reconciling rolebinding resource", "name", roleBindingName)
289284
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)
285+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
295286
if err != nil {
296287
return FromClientError(err, "failed to check %s rolebinding resource already exists", roleBindingName)
297288
}
@@ -333,11 +324,7 @@ func (r *Reconciler) createOrApplyRoleForLeases(istiocsr *v1alpha1.IstioCSR, res
333324
roleName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
334325
r.log.V(4).Info("reconciling role for lease resource", "name", roleName)
335326
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)
327+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
341328
if err != nil {
342329
return FromClientError(err, "failed to check %s role resource already exists", roleName)
343330
}
@@ -377,11 +364,7 @@ func (r *Reconciler) createOrApplyRoleBindingForLeases(istiocsr *v1alpha1.IstioC
377364
roleBindingName := fmt.Sprintf("%s/%s", desired.GetNamespace(), desired.GetName())
378365
r.log.V(4).Info("reconciling rolebinding for lease resource", "name", roleBindingName)
379366
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)
367+
exist, err := r.Exists(r.ctx, client.ObjectKeyFromObject(desired), fetched)
385368
if err != nil {
386369
return FromClientError(err, "failed to check %s rolebinding resource already exists", roleBindingName)
387370
}

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)