K8s controller implementing Multi-Cluster Services API based on AWS Cloud Map.

AWS Cloud Map MCS Controller for K8s

Documentation CodeQL Build status Deploy status codecov

License contributions welcome GitHub issues Go Report Card

Introduction

AWS Cloud Map multi-cluster service discovery for Kubernetes (K8s) is a controller that implements existing multi-cluster services API that allows services to communicate across multiple clusters. The implementation relies on AWS Cloud Map for enabling cross-cluster service discovery.

Usage

There must exist network connectivity (i.e. VPC peering, security group rules, ACLs, etc.) between clusters: Undefined behavior may occur if controller is set up without network connectivity between clusters.

Setup clusters

First, install the controller with latest release on at least 2 AWS EKS clusters. Nodes must have sufficient IAM permissions to perform CloudMap operations.

kubectl apply -k "github.com/aws/aws-cloud-map-mcs-controller-for-k8s/config/controller_install_release"

📌 See Releases section for details on how to install other versions.

Export services

Then assuming you already have a Service installed, apply a ServiceExport yaml to the cluster in which you want to export a service. This can be done for each service you want to export.

kind: ServiceExport
apiVersion: multicluster.x-k8s.io/v1alpha1
metadata:
  namespace: [Your service namespace here]
  name: [Your service name]

Example: This will export a service with name my-amazing-service in namespace hello

kind: ServiceExport
apiVersion: multicluster.x-k8s.io/v1alpha1
metadata:
  namespace: hello
  name: my-amazing-service

See the samples directory for a set of example yaml files to set up a service and export it. To apply the sample files run

kubectl create namespace demo
kubectl apply -f https://raw.githubusercontent.com/aws/aws-cloud-map-mcs-controller-for-k8s/main/samples/demo-deployment.yaml
kubectl apply -f https://raw.githubusercontent.com/aws/aws-cloud-map-mcs-controller-for-k8s/main/samples/demo-service.yaml
kubectl apply -f https://raw.githubusercontent.com/aws/aws-cloud-map-mcs-controller-for-k8s/main/samples/demo-export.yaml

Import services

In your other cluster, the controller will automatically sync services registered in AWS CloudMap by applying the appropriate ServiceImport. To list them all, run

kubectl get ServiceImport -A

Releases

AWS Cloud Map MCS Controller for K8s adheres to the SemVer specification. Each release updates the major version tag (eg. vX), a major/minor version tag (eg. vX.Y) and a major/minor/patch version tag (eg. vX.Y.Z). To see a full list of all releases, refer to our Github releases page.

To install from a release run

kubectl apply -k "github.com/aws/aws-cloud-map-mcs-controller-for-k8s/config/controller_install_release[?ref=*git version tag*]"

Example to install latest release

kubectl apply -k "github.com/aws/aws-cloud-map-mcs-controller-for-k8s/config/controller_install_release"

Example to install v0.1.0

kubectl apply -k "github.com/aws/aws-cloud-map-mcs-controller-for-k8s/config/controller_install_release?ref=v0.1.0"

We also maintain a latest tag, which is updated to stay in line with the main branch. We do not recommend installing this on any production cluster, as any new major versions updated on the main branch will introduce breaking changes.

To install from latest tag run

kubectl apply -k "github.com/aws/aws-cloud-map-mcs-controller-for-k8s/config/controller_install_latest"

Contributing

aws-cloud-map-mcs-controller-for-k8s is an open source project. See CONTRIBUTING for details.

License

This project is distributed under the Apache License, Version 2.0, see LICENSE and NOTICE for more information.

Comments
  • Cloud Map API Throttling

    Cloud Map API Throttling

    I keep getting API error from MCS cloud map controller

    {"level":"error","ts":1649927224.8055146,"logger":"controllers.Cloudmap","msg":"Cloud Map reconciliation error","error":"operation error ServiceDiscovery: ListServices, exceeded maximum number of attempts, 3, https response error StatusCode: 400, RequestID: 81d0ef9f-ed2b-49d5-98ee-b3b1f6934f7f, api error ThrottlingException: Rate exceeded","stacktrace":"github.com/go-logr/zapr.(*zapLogger).Error\n\t/go/pkg/mod/github.com/go-logr/[email protected]/zapr.go:132\ngithub.com/aws/aws-cloud-map-mcs-controller-for-k8s/pkg/common.logger.Error\n\t/workspace/pkg/common/logger.go:39\ngithub.com/aws/aws-cloud-map-mcs-controller-for-k8s/pkg/controllers.(*CloudMapReconciler).Start\n\t/workspace/pkg/controllers/cloudmap_controller.go:43\nsigs.k8s.io/controller-runtime/pkg/manager.(*controllerManager).startRunnable.func1\n\t/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/manager/internal.go:681"}
    

    How can we configure the Cloud map controller to reduce the API call ?

    Thanks

  • Inconsistent service availability

    Inconsistent service availability

    We use cloudmap controller in multiple clusters and have the same problem on them. Clusters are linked by vpc peering. Half of the time, an imported service cannot be reached in a pod.

    • Service name is correctly resolved in an internal kube adress.
    • If I use the endpointslice adress of the remote service, it works on every pod.
    • I created a DaemonSet for testing purposes to see if it can be a network/node problem. A pod that have worked on a node can fail after a restart and vice versa.
    • We used mcs-controller in v0.2.3 and updated in v0.3.0 and have the same problems.
    • Kubernetes 1.21 on all clusters.

    I have a feeling that there is some trouble between the service and endpointslice resolution but it don't know how can I debug it.

  • AWS SDK region is not correctly set

    AWS SDK region is not correctly set

    Controller loads the target region from AWS_REGION env variable, but this variable is never set in configuration files.

    https://github.com/aws/aws-cloud-map-mcs-controller-for-k8s/blob/ba9b31ca87969c5bd4e3cdf6259551c9216e36ad/main.go#L90

    Error message when running the controller:

    2021-10-19T23:07:39.211Z ERROR controllers.ServiceExport error when creating new service in Cloud Map {"serviceexport": "demo/demo-service", "namespace": "demo", "name": "demo-service", "error": "operation error ServiceDiscovery: ListNamespaces, failed to resolve service endpoint, an AWS region is required, but was not found"}

  •  Add the support for creating service with DNS namespace type

    Add the support for creating service with DNS namespace type

    Issue #, if available:

    Description of changes: Handle DNS namespaces along-with the HttpNamespace. Create the Service for the DNS namespace type the type SRV. Update the namespaceCache to support namespace struct.

    By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

  • Bump k8s.io/client-go from 0.24.2 to 0.25.2

    Bump k8s.io/client-go from 0.24.2 to 0.25.2

    Bumps k8s.io/client-go from 0.24.2 to 0.25.2.

    Commits
    • 593f096 Update dependencies to v0.25.2 tag
    • 1904631 Merge pull request #112161pohly/automated-cherry-pick-of-#112129
    • 8f4eb75 Merge pull request #112336enj/automated-cherry-pick-of-#112017
    • e278668 dependencies: update to ginkgo v2.1.6 and gomega v1.20.1
    • 1874bc6 exec auth: support TLS config caching
    • db7e2d8 Merge pull request #112055aanm/automated-cherry-pick-of-#111752
    • c9008f3 client-go/rest: check if url is nil to prevent nil pointer dereference
    • 1a46dfd Revert "client-go: remove no longer used finalURLTemplate"
    • b3e4a40 Merge remote-tracking branch 'origin/master' into release-1.25
    • c2f61ae Update removal warnings to 1.26
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump k8s.io/apimachinery from 0.24.3 to 0.25.2

    Bump k8s.io/apimachinery from 0.24.3 to 0.25.2

    Bumps k8s.io/apimachinery from 0.24.3 to 0.25.2.

    Commits
    • 478dd6e Merge pull request #112527liggitt/automated-cherry-pick-of-#112526
    • 14bc1be Limit redirect proxy handling to redirected responses
    • 8252641 Merge pull request #112330enj/automated-cherry-pick-of-#112193
    • 10b456c Merge pull request #112161pohly/automated-cherry-pick-of-#112129
    • 4759a80 Add an option for aggregator
    • 3296217 dependencies: update to ginkgo v2.1.6 and gomega v1.20.1
    • 117bd9b Merge pull request #111113 from mimowo/retriable-pod-failures-job-controller
    • 74deb3d Merge pull request #111696 from liggitt/go119mod
    • fef5499 Update go.mod to go1.19
    • 41606c6 Merge pull request #111677 from dims/stop-panic-in-govet-levee
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump k8s.io/api from 0.24.3 to 0.25.2

    Bump k8s.io/api from 0.24.3 to 0.25.2

    Bumps k8s.io/api from 0.24.3 to 0.25.2.

    Commits
    • 4b838ea Update dependencies to v0.25.2 tag
    • fce3016 Merge pull request #112161pohly/automated-cherry-pick-of-#112129
    • 29513a2 dependencies: update to ginkgo v2.1.6 and gomega v1.20.1
    • 5c4a1b1 Merge remote-tracking branch 'origin/master' into release-1.25
    • 714e431 Merge pull request #111657 from aojea/hc_nodeport
    • 8608211 Merge pull request #109090 from sarveshr7/multicidr-rangeallocator
    • b88698c Merge pull request #111258 from dobsonj/kep-596-ga-feature-flag
    • 2f9e588 Merge pull request #111113 from mimowo/retriable-pod-failures-job-controller
    • 3be517c Merge pull request #111696 from liggitt/go119mod
    • 991b481 Merge pull request #108692 from jsafrane/selinux
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Bump sigs.k8s.io/controller-runtime from 0.12.3 to 0.13.0

    Bump sigs.k8s.io/controller-runtime from 0.12.3 to 0.13.0

    Bumps sigs.k8s.io/controller-runtime from 0.12.3 to 0.13.0.

    Release notes

    Sourced from sigs.k8s.io/controller-runtime's releases.

    v0.13.0

    changes since v0.12.3

    :warning: Breaking Changes

    • Do not mutate the global warning handler (#1944)
    • Add GetOptions as optional argument of client.Reader and all its implementation (#1917)

    :sparkles: New Features

    • Bump golangci lint to v1.49.0 (#1988)
    • Update k8s API to v1.25 (#1985)
    • Implement IgnoreAlreadyExists (#1965)
    • Bump k8s v0.25.0-alpha.3 (#1967)
    • webhook: add an option to recover from panics in handler (#1900)
    • Provide access to admission.Request in custom validator/defaulter (#1950)
    • komega: add EqualObject matcher (#1833)
    • fix some typos (#1924)
    • Allow TLS to be entirely configured on webhook server (#1897)

    :bug: Bug Fixes

    • Rearange EventBroadcaster log statement. (#1974)
    • Fix log depth for DelegatingLogSink (#1975)
    • Remove no-op clientgo reflector metrics (#1946)
    • Fix webhook write response error for broken HTTP connection (#1930)
    • Fix issue with starting multiple test envs (#1910)
    • don't override global log in builder (#1907)
    • skip mutation handler when received deletion verb (#1765)
    • fix loading CRDs from multiple directories in envtests (#1904)

    Thanks to all our contributors!

    Commits
    • d242fe2 Merge pull request #1988 from sbueringer/pr-bump-golangci-lint
    • 4b208ab Bump golangci lint to v1.49.0
    • 02dc464 Merge pull request #1985 from Fedosin/k8s_v125
    • 0873d15 Bump k8s libs to v1.25
    • 7a5d60d Merge pull request #1983 from nakamasato/fix-reconciler-comment
    • 3ba8cf0 docs: update doc for reconcile example
    • 2d210d0 Merge pull request #1965 from rstefan1/implement-ignore-already-exists
    • c2c26e3 Implement IgnoreAlreadyExists
    • b792a7d Merge pull request #1974 from danaradg/event-broadcaster-log-fix
    • 5a88c51 Merge pull request #1975 from alculquicondor/fix-log-depth
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • Implement end-to-end EKS integration test

    Implement end-to-end EKS integration test

    Implementing feature requested in Issue #100: End-to-end integration test using EKS.

    Description of changes: Using EKS, this new end-to-end integration test covers service exports and imports across two EKS clusters, as well as testing service consumption by the importing cluster. The test is largely based on this blog. The test can be run using the command make eks-integration-suite.

    This gives the project an integration test that more accurately represents the actual use-case of the controller, in that it tests the controller's functionalities with two EKS clusters instead of one local cluster, as the previous test had been. Adding this to the project workflows allow for more accurate testing of the current state of the controller, ensuring its core functionalities are maintained across commits.

    Testing:

    • The original integration test,make integration-suite, still runs successfully.
    • The test has been successfully run multiple times in a row with no manual intervention
    • Should the test fail for whatever reason, the user is able to run make eks-integration-cleanup and the EKS clusters are properly cleaned for any upcoming tests

    Next steps:

    • This integration test needs be added to project workflow
    • The test requires the user to manually setup EKS clusters, a guide which will be made available to the public
    • In the future, possible improvements to the test can be making it a one-touch test, so the user does not have to manually create the EKS clusters

    By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

  • Fix build for multiple Go versions

    Fix build for multiple Go versions

    Issue #130

    Check to see Go version and dependency versions are compatible. Change go get to go install in line with module dependency changes.

    By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

  • Makefile Build Failure with Go version 1.18.x

    Makefile Build Failure with Go version 1.18.x

    Installing executables in module mode with go get is deprecated: notice.

    /Users/fjywang/aws-cloud-map-mcs-controller-for-k8s/bin/controller-gen "crd:trivialVersions=true,preserveUnknownFields=false" rbac:roleName=manager-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases
    bash: /Users/fjywang/aws-cloud-map-mcs-controller-for-k8s/bin/controller-gen: No such file or directory
    
  • [Feature] flag to enable service discovery cleanup

    [Feature] flag to enable service discovery cleanup

    Current State: Instances correctly deregistered, but dont see the default namespace and services cleaned up outside of that

    Desired state: Want the ability to allow the controller to properly clean up all resources it created. The tutorial currently gives cloud map full access, so would follow that still.

    Use case: We use SD for other things like ECS services though and eventually want to have a shared namespace controlled by IaC. At that point if we destroyed the stack and there were orphaned services from the k8s controller our IaC would fail to delete the SD namespace

  • Integration tests with 2 kind clusters

    Integration tests with 2 kind clusters

    1. Configure 2 kind clusters, and ensure the controller features works across them
    2. Inject AWS creds into the controlller docker as env variables
    3. Use separate namespace for each run to ensure multiple it can run in parallel
  • Rework on setting AWS_REGION env variable

    Rework on setting AWS_REGION env variable

    Set aws-region via kustomize edit command instead of the environment variable substitution. Environmental substitution was a bug documented as a feature, and is going to be fixed in the future release. Check this link for more context: https://github.com/kubernetes/website/issues/35669

    Also https://kubectl.docs.kubernetes.io/faq/kustomize/eschewedfeatures/#build-time-side-effects-from-cli-args-or-env-variables

  • Dual-Stack (IPv4 and IPV6) Support

    Dual-Stack (IPv4 and IPV6) Support

    Initial implementation of the controller is purely focused on IPv4 support. Research if dual-stack support is needed and implement that.

    Dual stack networking is coming to K8s soon: (alpha: "v1.20"/beta: "v1.21"/stable: "v1.23")

    See https://github.com/kubernetes/enhancements/tree/master/keps/sig-network/563-dual-stack

  • ServiceType conflict resolution

    ServiceType conflict resolution

    In the case that a user is trying to export two services, one of ClusterIP and one of Headless, with the same namespaced name, the controller needs a way to reconcile the conflicting types.

    Following the conflict resolution policy, this can be done by propagating the SeviceExport's creationTimestamp to Cloud Map Endpoints as a custom instance attribute, and the older service will take priority, with the newer service not getting exported to Cloud Map.

  • Panic in reconciler causing segmentation violation

    Panic in reconciler causing segmentation violation

    During benchmark testing, controller completely halted with a panic due to the attempt of accessing an invalid memory address or nil pointer dereference causing a segmentation violation.

    Here are the last logs from the manager:

    {"level":"info","ts":1655941251.2284162,"logger":"controllers.Cloudmap","msg":"CalculateChanges_ES_Plan","elapsed":9}
    {"level":"info","ts":1655941251.228578,"logger":"controllers.Cloudmap","msg":"CalculateChanges_ES_Plan","elapsed":10}
    {"level":"info","ts":1655941252.7608504,"logger":"controllers.ServiceExport","msg":"updating Cloud Map service","namespace":"demov2","name":"nginx-benchmark-service-61"}
    {"level":"info","ts":1655941252.7608776,"logger":"cloudmap","msg":"fetching a service","namespace":"demov2","name":"nginx-benchmark-service-61"}
    {"level":"info","ts":1655941252.76091,"logger":"cloudmap","msg":"creating a new service","namespace":"demov2","name":"nginx-benchmark-service-61"}
    {"level":"info","ts":1655941252.8043206,"logger":"cloudmap","msg":"service created","namespace":"demov2","name":"nginx-benchmark-service-61","id":"srv-vvx3saukvkvkytng"}
    {"level":"info","ts":1655941252.8043518,"logger":"cloudmap","msg":"fetching a service","namespace":"demov2","name":"nginx-benchmark-service-61"}
    {"level":"info","ts":1655941252.8277564,"msg":"Observed a panic in reconciler: runtime error: invalid memory address or nil pointer dereference","controller":"serviceexport","controllerGroup":"multicluster.x-k8s.io","controllerKind":"ServiceExport","serviceExport":{"name":"nginx-benchmark-service-61","namespace":"demov2"},"namespace":"demov2","name":"nginx-benchmark-service-61","reconcileID":"f1c0f919-fdb1-4e63-be72-6aa2f4df35e7"}
    panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    	panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x15204f7]
    
    goroutine 221 [running]:
    sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile.func1()
    	/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:118 +0x1f4
    panic({0x16819e0, 0x271b0e0})
    	/usr/local/go/src/runtime/panic.go:1038 +0x215
    github.com/aws/aws-cloud-map-mcs-controller-for-k8s/pkg/controllers.(*ServiceExportReconciler).handleUpdate(0xc000461e40, {0x1aad4b0, 0xc0007644c0}, 0xc00032be00, 0xc000d08000)
    	/workspace/pkg/controllers/serviceexport_controller.go:136 +0x597
    github.com/aws/aws-cloud-map-mcs-controller-for-k8s/pkg/controllers.(*ServiceExportReconciler).Reconcile(0xc000461e40, {0x1aad558, 0xc000b44540}, {{{0xc000d0b876, 0x18}, {0xc000b68780, 0x40d3a7}}})
    	/workspace/pkg/controllers/serviceexport_controller.go:93 +0x7d5
    sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Reconcile(0x1aad4b0, {0x1aad558, 0xc000b44540}, {{{0xc000d0b876, 0x17a4d00}, {0xc000b68780, 0x40ee1d}}})
    	/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:121 +0xd1
    sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).reconcileHandler(0xc00031b7c0, {0x1aad4b0, 0xc000461c40}, {0x16e0800, 0xc00098b8c0})
    	/go/pkg/mod/sigs.k8s.io/controller-ru[email protected]/pkg/internal/controller/controller.go:320 +0x33c
    sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem(0xc00031b7c0, {0x1aad4b0, 0xc000461c40})
    	/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:273 +0x205
    sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2()
    	/go/pkg/mod/sigs.k8s.io/[email protected]/pkg/internal/controller/controller.go:234 +0x85
    created by sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2
    	/go/pkg/mod/sigs.k8s.io/controller-ru[email protected]/pkg/internal/controller/controller.go:230 +0x36f
    
    

    Note that the code lines do not line up exactly with the Controller's code. serviceexport_controller.go:136 points to the Current: cmService.Endpoints line and serviceexport_controller.go:93 to the return r.handleUpdate(ctx, &serviceExport, &service)

Write controller-runtime based k8s controllers that read/write to git, not k8s

Git Backed Controller The basic idea is to write a k8s controller that runs against git and not k8s apiserver. So the controller is reading and writin

Dec 10, 2021
provide api for cloud service like aliyun, aws, google cloud, tencent cloud, huawei cloud and so on

cloud-fitter 云适配 Communicate with public and private clouds conveniently by a set of apis. 用一套接口,便捷地访问各类公有云和私有云 对接计划 内部筹备中,后续开放,有需求欢迎联系。 开发者社区 开发者社区文档

Dec 20, 2022
A Terraform module to manage cluster authentication (aws-auth) for an Elastic Kubernetes (EKS) cluster on AWS.

Archive Notice The terraform-aws-modules/eks/aws v.18.20.0 release has brought back support aws-auth configmap! For this reason, I highly encourage us

Dec 4, 2022
Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration
Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration

Karmada Karmada: Open, Multi-Cloud, Multi-Cluster Kubernetes Orchestration Karmada (Kubernetes Armada) is a Kubernetes management system that enables

Dec 30, 2022
Amazon Web Services (AWS) providerAmazon Web Services (AWS) provider

Amazon Web Services (AWS) provider The Amazon Web Services (AWS) resource provider for Pulumi lets you use AWS resources in your cloud programs. To us

Nov 10, 2021
Rotate is a tool for rotating out AWS Auto-Scaling Groups within a k8s cluster

k8s-r8 rotate is a tool for rotating out AWS Auto-Scaling Groups within a k8s cluster. It was developed to make upgrading AMIs as a one command experi

Mar 27, 2022
cluster-api-state-metrics (CASM) is a service that listens to the Kubernetes API server and generates metrics about the state of custom resource objects related of Kubernetes Cluster API.

Overview cluster-api-state-metrics (CASM) is a service that listens to the Kubernetes API server and generates metrics about the state of custom resou

Oct 27, 2022
Kilo is a multi-cloud network overlay built on WireGuard and designed for Kubernetes (k8s + wg = kg)

Kilo Kilo is a multi-cloud network overlay built on WireGuard and designed for Kubernetes. Overview Kilo connects nodes in a cluster by providing an e

Jan 1, 2023
🔥 🔥 Open source cloud native security observability platform. Linux, K8s, AWS Fargate and more. 🔥 🔥
🔥 🔥   Open source cloud native security observability platform. Linux, K8s, AWS Fargate and more. 🔥 🔥

CVE-2021-44228 Log4J Vulnerability can be detected at runtime and attack paths can be visualized by ThreatMapper. Live demo of Log4J Vulnerability her

Jan 1, 2023
K8s-go-structs - All k8s API Go structs

k8s-api go types Why? Its nice to have it all in a single package. . |-- pkg |

Jul 17, 2022
Image clone controller is a kubernetes controller to safe guard against the risk of container images disappearing

Image clone controller image clone controller is a kubernetes controller to safe guard against the risk of container images disappearing from public r

Oct 10, 2021
A Controller written in kubernetes sample-controller style which watches a custom resource named Bookstore

bookstore-sample-controller A Controller written in kubernetes sample-controller style which watches a custom resource named Bookstore. A resource cre

Jan 20, 2022
Kubelet-bench - Example Go-based e2e benchmark for various Kubelet operations without spinning up whole K8s cluster

kubelet-bench An example of Go based e2e benchmark for various Kubelet operation

Mar 17, 2022
Cloud-on-k8s- - Elastic Cloud on Kubernetes (ECK)

Elastic Cloud on Kubernetes (ECK) Elastic Cloud on Kubernetes automates the depl

Jan 29, 2022
A controller to create K8s Ingresses for Openshift routes.

route-to-ingress-operator A controller to create corresponding ingress.networking.k8s.io/v1 resources for route.openshift.io/v1 TODO int port string p

Jan 7, 2022
The k8s-generic-webhook is a library to simplify the implementation of webhooks for arbitrary customer resources (CR) in the operator-sdk or controller-runtime.

k8s-generic-webhook The k8s-generic-webhook is a library to simplify the implementation of webhooks for arbitrary customer resources (CR) in the opera

Nov 24, 2022
Ejemplo de un k8s custom controller para un CRD nuevo

Clonado de kubernetes/sample-controller Para pruebas de un CRD nuevo This repository implements a simple controller for watching Foo resources as defi

Nov 3, 2021
K8S ConfigMap Merging Controller

ConfigMap Merging Controller (cmmc) cmmc is a k8s operator that allows for the merging of ConfigMap resources with data validation. Why? The impetus f

Oct 2, 2022
Controller-check - Run checks against K8s controllers to verify if they meets certain conventions

controller-check Run checks against K8s controllers to verify if they meets cert

Jan 4, 2022