Skip to content
This repository was archived by the owner on Jul 11, 2023. It is now read-only.

Commit 0b6a18f

Browse files
shaliernshankar13
andauthored
[backport] cherry-pick 68e99eb to release-v1.2 (#5069)
Signed-off-by: Shalier Xia <[email protected]> Signed-off-by: Shalier Xia <[email protected]> Co-authored-by: Niranjan Shankar <[email protected]>
1 parent d2175d3 commit 0b6a18f

31 files changed

+92
-988
lines changed

charts/osm/templates/osm-bootstrap-deployment.yaml

-12
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,6 @@ spec:
3333
{{- if not (.Capabilities.APIVersions.Has "security.openshift.io/v1") }}
3434
{{- include "restricted.securityContext" . | nindent 6 }}
3535
{{- end }}
36-
initContainers:
37-
- name: init-osm-bootstrap
38-
image: "{{ include "osmCRDs.image" . }}"
39-
imagePullPolicy: {{ .Values.osm.image.pullPolicy }}
40-
command:
41-
- sh
42-
- -c
43-
- >
44-
kubectl apply -f /osm-crds;
45-
{{- if .Values.osm.enableReconciler }}
46-
kubectl label -f /osm-crds openservicemesh.io/reconcile=true --overwrite;
47-
{{- end }}
4836
containers:
4937
- name: osm-bootstrap
5038
image: "{{ include "osmBootstrap.image" . }}"

cmd/osm-bootstrap/crds/config_mesh_root_certificate.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ spec:
3030
- mrc
3131
singular: meshrootcertificate
3232
plural: meshrootcertificates
33+
conversion:
34+
strategy: None
3335
versions:
3436
- name: v1alpha2
3537
served: true

cmd/osm-bootstrap/crds/config_meshconfig.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ spec:
3030
- meshconfig
3131
singular: meshconfig
3232
plural: meshconfigs
33+
conversion:
34+
strategy: None
3335
versions:
3436
- name: v1alpha2
3537
served: true

cmd/osm-bootstrap/crds/policy_egress.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ spec:
3030
- egress
3131
singular: egress
3232
plural: egresses
33+
conversion:
34+
strategy: None
3335
versions:
3436
- name: v1alpha1
3537
served: true

cmd/osm-bootstrap/crds/policy_ingress_backend.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ spec:
3030
- ingressbackend
3131
singular: ingressbackend
3232
plural: ingressbackends
33+
conversion:
34+
strategy: None
3335
versions:
3436
- name: v1alpha1
3537
served: true

cmd/osm-bootstrap/crds/policy_retry.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ spec:
3030
- retry
3131
singular: retry
3232
plural: retries
33+
conversion:
34+
strategy: None
3335
versions:
3436
- name: v1alpha1
3537
served: true

cmd/osm-bootstrap/crds/policy_upstream_traffic_setting.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ spec:
3030
- upstreamtrafficsetting
3131
singular: upstreamtrafficsetting
3232
plural: upstreamtrafficsettings
33+
conversion:
34+
strategy: None
3335
versions:
3436
- name: v1alpha1
3537
served: true

cmd/osm-bootstrap/crds/smi_http_route_group.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ spec:
2929
- htr
3030
plural: httproutegroups
3131
singular: httproutegroup
32+
conversion:
33+
strategy: None
3234
versions:
3335
- name: v1alpha4
3436
served: true

cmd/osm-bootstrap/crds/smi_tcp_route.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ spec:
2929
- tr
3030
plural: tcproutes
3131
singular: tcproute
32+
conversion:
33+
strategy: None
3234
versions:
3335
- name: v1alpha4
3436
served: true

cmd/osm-bootstrap/crds/smi_traffic_access.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ spec:
2929
- tt
3030
plural: traffictargets
3131
singular: traffictarget
32+
conversion:
33+
strategy: None
3234
versions:
3335
- name: v1alpha3
3436
served: true

cmd/osm-bootstrap/crds/smi_traffic_split.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ spec:
3030
- ts
3131
plural: trafficsplits
3232
singular: trafficsplit
33+
conversion:
34+
strategy: None
3335
versions:
3436
- name: v1alpha4
3537
served: false

cmd/osm-bootstrap/osm-bootstrap.go

+71-68
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,34 @@ import (
1111
"fmt"
1212
"net/http"
1313
"os"
14-
"time"
14+
"path/filepath"
15+
"strconv"
1516

1617
"github.com/spf13/pflag"
1718
admissionv1 "k8s.io/api/admissionregistration/v1"
1819
corev1 "k8s.io/api/core/v1"
20+
apiv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1921
clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
2022
apiclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
2123
apierrors "k8s.io/apimachinery/pkg/api/errors"
2224
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2325
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
2426
"k8s.io/apimachinery/pkg/runtime"
27+
"k8s.io/apimachinery/pkg/runtime/serializer"
2528
"k8s.io/client-go/kubernetes"
2629
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
2730
"k8s.io/client-go/tools/clientcmd"
2831
"k8s.io/kubectl/pkg/util"
2932

3033
configv1alpha2 "github.com/openservicemesh/osm/pkg/apis/config/v1alpha2"
31-
"github.com/openservicemesh/osm/pkg/certificate"
3234
configClientset "github.com/openservicemesh/osm/pkg/gen/client/config/clientset/versioned"
3335
"github.com/openservicemesh/osm/pkg/health"
3436

3537
"github.com/openservicemesh/osm/pkg/certificate/providers"
36-
"github.com/openservicemesh/osm/pkg/configurator"
3738
"github.com/openservicemesh/osm/pkg/constants"
38-
"github.com/openservicemesh/osm/pkg/crdconversion"
3939
"github.com/openservicemesh/osm/pkg/httpserver"
4040
"github.com/openservicemesh/osm/pkg/k8s/events"
41-
"github.com/openservicemesh/osm/pkg/k8s/informers"
4241
"github.com/openservicemesh/osm/pkg/logger"
43-
"github.com/openservicemesh/osm/pkg/messaging"
4442
"github.com/openservicemesh/osm/pkg/metricsstore"
4543
"github.com/openservicemesh/osm/pkg/reconciler"
4644
"github.com/openservicemesh/osm/pkg/signals"
@@ -68,7 +66,6 @@ var (
6866
certProviderKind string
6967
enableMeshRootCertificate bool
7068

71-
tresorOptions providers.TresorOptions
7269
vaultOptions providers.VaultOptions
7370
certManagerOptions providers.CertManagerOptions
7471

@@ -124,21 +121,6 @@ func init() {
124121
_ = admissionv1.AddToScheme(scheme)
125122
}
126123

127-
// TODO(#4502): This function can be deleted once we get rid of cert options.
128-
func getCertOptions() (providers.Options, error) {
129-
switch providers.Kind(certProviderKind) {
130-
case providers.TresorKind:
131-
tresorOptions.SecretName = caBundleSecretName
132-
return tresorOptions, nil
133-
case providers.VaultKind:
134-
vaultOptions.VaultTokenSecretNamespace = osmNamespace
135-
return vaultOptions, nil
136-
case providers.CertManagerKind:
137-
return certManagerOptions, nil
138-
}
139-
return nil, fmt.Errorf("unknown certificate provider kind: %s", certProviderKind)
140-
}
141-
142124
func main() {
143125
log.Info().Msgf("Starting osm-bootstrap %s; %s; %s", version.Version, version.GitCommit, version.BuildDate)
144126
if err := parseFlags(); err != nil {
@@ -175,6 +157,8 @@ func main() {
175157
namespace: osmNamespace,
176158
}
177159

160+
applyOrUpdateCRDs(crdClient)
161+
178162
err = bootstrap.ensureMeshConfig()
179163
if err != nil {
180164
log.Fatal().Err(err).Msgf("Error setting up default MeshConfig %s from ConfigMap %s", meshConfigName, presetMeshConfigName)
@@ -194,7 +178,7 @@ func main() {
194178
log.Fatal().Err(err).Msg("Error initializing Kubernetes events recorder")
195179
}
196180

197-
ctx, cancel := context.WithCancel(context.Background())
181+
_, cancel := context.WithCancel(context.Background())
198182
defer cancel()
199183
stop := signals.RegisterExitHandlers(cancel)
200184

@@ -203,50 +187,22 @@ func main() {
203187
metricsstore.DefaultMetricsStore.ErrCodeCounter,
204188
metricsstore.DefaultMetricsStore.HTTPResponseTotal,
205189
metricsstore.DefaultMetricsStore.HTTPResponseDuration,
206-
metricsstore.DefaultMetricsStore.ConversionWebhookResourceTotal,
207190
metricsstore.DefaultMetricsStore.ReconciliationTotal,
208191
)
209192

210-
msgBroker := messaging.NewBroker(stop)
211-
212-
informerCollection, err := informers.NewInformerCollection(meshName, stop,
213-
informers.WithKubeClient(kubeClient),
214-
informers.WithConfigClient(configClient, osmMeshConfigName, osmNamespace),
215-
)
216-
217-
if err != nil {
218-
events.GenericEventRecorder().FatalEvent(err, events.InitializationError, "Error creating informer collection")
219-
}
220-
221-
// Initialize Configurator to watch resources in the config.openservicemesh.io API group
222-
cfg := configurator.NewConfigurator(informerCollection, osmNamespace, osmMeshConfigName, msgBroker)
223-
224-
certOpts, err := getCertOptions()
225-
if err != nil {
226-
log.Fatal().Err(err).Msg("Error getting certificate options")
227-
}
228-
229-
var certManager *certificate.Manager
230-
if enableMeshRootCertificate {
231-
certManager, err = providers.NewCertificateManagerFromMRC(ctx, kubeClient, kubeConfig, cfg, osmNamespace, certOpts, msgBroker, informerCollection, 5*time.Second)
232-
if err != nil {
233-
events.GenericEventRecorder().FatalEvent(err, events.InvalidCertificateManager,
234-
"Error initializing certificate manager of kind %s from MRC", certProviderKind)
235-
}
236-
} else {
237-
certManager, err = providers.NewCertificateManager(ctx, kubeClient, kubeConfig, cfg, osmNamespace, certOpts, msgBroker, 5*time.Second, trustDomain)
193+
version.SetMetric()
194+
/*
195+
* Initialize osm-bootstrap's HTTP server
196+
*/
197+
if enableReconciler {
198+
log.Info().Msgf("OSM reconciler enabled for custom resource definitions")
199+
err = reconciler.NewReconcilerClient(kubeClient, apiServerClient, meshName, osmVersion, stop, reconciler.CrdInformerKey)
238200
if err != nil {
239-
events.GenericEventRecorder().FatalEvent(err, events.InvalidCertificateManager,
240-
"Error initializing certificate manager of kind %s", certProviderKind)
201+
events.GenericEventRecorder().FatalEvent(err, events.InitializationError, "Error creating reconciler client for custom resource definitions")
202+
log.Fatal().Err(err).Msgf("Failed to create reconcile client for custom resource definitions")
241203
}
242204
}
243205

244-
// Initialize the crd conversion webhook server to support the conversion of OSM's CRDs
245-
if err := crdconversion.NewConversionWebhook(ctx, kubeClient, crdClient, certManager, osmNamespace, enableReconciler); err != nil {
246-
events.GenericEventRecorder().FatalEvent(err, events.InitializationError, "Error creating crd conversion webhook")
247-
}
248-
249-
version.SetMetric()
250206
/*
251207
* Initialize osm-bootstrap's HTTP server
252208
*/
@@ -264,19 +220,66 @@ func main() {
264220
log.Fatal().Err(err).Msgf("Failed to start OSM metrics/probes HTTP server")
265221
}
266222

267-
if enableReconciler {
268-
log.Info().Msgf("OSM reconciler enabled for custom resource definitions")
269-
err = reconciler.NewReconcilerClient(kubeClient, apiServerClient, meshName, osmVersion, stop, reconciler.CrdInformerKey)
270-
if err != nil {
271-
events.GenericEventRecorder().FatalEvent(err, events.InitializationError, "Error creating reconciler client for custom resource definitions")
272-
}
273-
}
274-
275223
<-stop
276224
cancel()
277225
log.Info().Msgf("Stopping osm-bootstrap %s; %s; %s", version.Version, version.GitCommit, version.BuildDate)
278226
}
279227

228+
func applyOrUpdateCRDs(crdClient *apiclient.ApiextensionsV1Client) {
229+
crdFiles, err := filepath.Glob("/osm-crds/*.yaml")
230+
231+
if err != nil {
232+
log.Fatal().Err(err).Msgf("error reading files from /osm-crds")
233+
}
234+
235+
scheme = runtime.NewScheme()
236+
codecs := serializer.NewCodecFactory(scheme)
237+
decode := codecs.UniversalDeserializer().Decode
238+
239+
for _, file := range crdFiles {
240+
yaml, err := os.ReadFile(filepath.Clean(file))
241+
if err != nil {
242+
log.Fatal().Err(err).Msgf("Error reading CRD file %s", file)
243+
}
244+
245+
crd := &apiv1.CustomResourceDefinition{}
246+
_, _, err = decode(yaml, nil, crd)
247+
if err != nil {
248+
log.Fatal().Err(err).Msgf("Error decoding CRD file %s", file)
249+
}
250+
251+
crd.Labels[constants.ReconcileLabel] = strconv.FormatBool(enableReconciler)
252+
253+
crdExisting, err := crdClient.CustomResourceDefinitions().Get(context.Background(), crd.Name, metav1.GetOptions{})
254+
if err != nil && !apierrors.IsNotFound(err) {
255+
log.Fatal().Err(err).Msgf("error getting CRD %s", crd.Name)
256+
}
257+
258+
if apierrors.IsNotFound(err) {
259+
log.Info().Msgf("crds %s not found, creating CRD", crd.Name)
260+
if err := util.CreateApplyAnnotation(crd, unstructured.UnstructuredJSONScheme); err != nil {
261+
log.Fatal().Err(err).Msgf("Error applying annotation to CRD %s", crd.Name)
262+
}
263+
if _, err = crdClient.CustomResourceDefinitions().Create(context.Background(), crd, metav1.CreateOptions{}); err != nil {
264+
log.Fatal().Err(err).Msgf("Error creating crd : %s", crd.Name)
265+
}
266+
log.Info().Msgf("Successfully created crd: %s", crd.Name)
267+
} else {
268+
log.Info().Msgf("Patching conversion webhook configuration for crd: %s, setting to \"None\"", crd.Name)
269+
270+
crdExisting.Labels[constants.ReconcileLabel] = strconv.FormatBool(enableReconciler)
271+
crdExisting.Spec = crd.Spec
272+
crdExisting.Spec.Conversion = &apiv1.CustomResourceConversion{
273+
Strategy: apiv1.NoneConverter,
274+
}
275+
if _, err = crdClient.CustomResourceDefinitions().Update(context.Background(), crdExisting, metav1.UpdateOptions{}); err != nil {
276+
log.Fatal().Err(err).Msgf("Error updating conversion webhook configuration for crd : %s", crd.Name)
277+
}
278+
log.Info().Msgf("successfully set conversion webhook configuration for crd : %s to \"None\"", crd.Name)
279+
}
280+
}
281+
}
282+
280283
func (b *bootstrap) createDefaultMeshConfig() error {
281284
// find presets config map to build the default MeshConfig from that
282285
presetsConfigMap, err := b.kubeClient.CoreV1().ConfigMaps(b.namespace).Get(context.TODO(), presetMeshConfigName, metav1.GetOptions{})

dockerfiles/Dockerfile.osm-bootstrap

+1
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ RUN --mount=type=cache,target=/root/.cache/go-build \
1212

1313
FROM gcr.io/distroless/static
1414
COPY --from=builder /osm/osm-bootstrap /
15+
COPY ./cmd/osm-bootstrap/crds /osm-crds/

go.mod

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ require (
3030
github.com/mholt/archiver/v3 v3.5.1
3131
github.com/mitchellh/gox v1.0.1
3232
github.com/mitchellh/hashstructure/v2 v2.0.1
33-
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822
3433
github.com/norwoodj/helm-docs v1.4.0
3534
github.com/olekukonko/tablewriter v0.0.5
3635
github.com/onsi/ginkgo v1.16.5

go.sum

-1
Original file line numberDiff line numberDiff line change
@@ -1623,7 +1623,6 @@ github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:
16231623
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
16241624
github.com/munnerz/crd-schema-fuzz v1.0.0/go.mod h1:4z/rcm37JxUkSsExFcLL6ZIT1SgDRdLiu7qq1evdVS0=
16251625
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
1626-
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
16271626
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
16281627
github.com/mwielbut/pointy v1.1.0/go.mod h1:MvvO+uMFj9T5DMda33HlvogsFBX7pWWKAkFIn4teYwY=
16291628
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=

pkg/constants/constants.go

-3
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,6 @@ const (
147147

148148
// OSMMeshConfig is the name of the OSM MeshConfig
149149
OSMMeshConfig = "osm-mesh-config"
150-
151-
// CRDConversionWebhookPort is the port of the CRD conversion webhook service
152-
CRDConversionWebhookPort = 9443
153150
)
154151

155152
// HealthProbe constants

0 commit comments

Comments
 (0)