Documentation ¶
Overview ¶
Package multicluster contains functions to add and retrieve multi cluster from context
Index ¶
- Variables
- func ClusterNames(ctx context.Context) []string
- func ClusterProxyHost(proxyHost string, proxyPath string, clusterName string) (string, error)
- func ClusterResourceAttributes(verb string) authv1.ResourceAttributes
- func IgnoreForbidden(ctx context.Context) bool
- func WithClusterNames(ctx context.Context, names []string) context.Context
- func WithIgnoreForbidden(ctx context.Context, ignoreForbidden bool) context.Context
- func WithMultiCluster(ctx context.Context, clt Interface) context.Context
- type AuthInfo
- type ClientGetter
- type Cluster
- type ClusterCondition
- type ClusterConditionType
- type ClusterFilter
- type ClusterList
- type ClusterManager
- type ClusterRegistryClient
- func (m *ClusterRegistryClient) GetClient(ctx context.Context, clusterRef *corev1.ObjectReference, ...) (clt client.Client, err error)
- func (m *ClusterRegistryClient) GetConfig(ctx context.Context, clusterRef *corev1.ObjectReference) (config *rest.Config, err error)
- func (m *ClusterRegistryClient) GetConfigFromCluster(ctx context.Context, cluster *unstructured.Unstructured) (config *rest.Config, err error)
- func (m *ClusterRegistryClient) GetDynamic(ctx context.Context, clusterRef *corev1.ObjectReference) (dyn dynamic.Interface, err error)
- func (m *ClusterRegistryClient) GetNamespaceClusters(ctx context.Context, namespace string) (clusterRefs []corev1.ObjectReference, err error)
- func (m *ClusterRegistryClient) ListClustersNamespaces(ctx context.Context, namespace string) (clusterNamespaces map[*corev1.ObjectReference][]corev1.Namespace, err error)
- func (m *ClusterRegistryClient) StartWarmUpClientCache(ctx context.Context)
- type ClusterRegistryClientOption
- type ClusterSpec
- type ClusterStatus
- type ConfigGetter
- type CrossClusterSubjectReview
- type Interface
- type KubernetesAPIEndpoints
- type NamespaceClustersGetter
- type ObjectReference
- type ServerAddressByClientCIDR
Constants ¶
This section is empty.
Variables ¶
var ClusterGVR = ClusterRegistryGroupVersion.WithResource("clusters")
var ClusterRegistryGVK = ClusterRegistryGroupVersion.WithKind("Cluster")
var ClusterRegistryGroupVersion = schema.GroupVersion{Group: "clusterregistry.k8s.io", Version: "v1alpha1"}
var ErrDoesNotHaveEndpoints = errors.New("cluster object does not have spec.kubernetesApiEndpoints.serverEndpoints")
var ErrDoesNotHaveServerAddress = errors.New("cluster object does not have spec.kubernetesApiEndpoints.serverEndpoints.serverAddress")
var ErrDoesNotHaveToken = errors.New("secret does not have data.token")
var ErrNilReference = errors.New("nil reference for clusterRef object")
var ErrNoNameProvided = errors.New("name must be provided")
var ErrNoNamespaceProvided = errors.New("namespace must be provided")
Functions ¶
func ClusterNames ¶ added in v0.7.0
ClusterNames return a cluster name list in context
func ClusterProxyHost ¶ added in v0.11.0
ClusterProxyHost constructs a complete proxy URL by replacing the cluster name placeholder in the proxy path It takes the proxy host and path, replaces the "{name}" placeholder with the actual cluster name, and returns the formatted proxy URL.
func ClusterResourceAttributes ¶ added in v0.9.0
func ClusterResourceAttributes(verb string) authv1.ResourceAttributes
ClusterResourceAttributes returns a ResourceAttribute object to be used in a filter
func IgnoreForbidden ¶ added in v0.7.0
IgnoreForbidden return a ignore forbidden flag in context
func WithClusterNames ¶ added in v0.7.0
WithClusterNames adds cluster names to the context
func WithIgnoreForbidden ¶ added in v0.7.0
WithIgnoreForbidden adds ignore forbidden flag to the context
Types ¶
type AuthInfo ¶
type AuthInfo struct { // User references an object that contains implementation-specific details // about how a user should authenticate against this cluster. // +optional User *ObjectReference `json:"user,omitempty" protobuf:"bytes,1,opt,name=user"` // Controller references an object that contains implementation-specific // details about how a controller should authenticate. A simple use case for // this would be to reference a secret in another namespace that stores a // bearer token that can be used to authenticate against this cluster's API // server. Controller *ObjectReference `json:"controller,omitempty" protobuf:"bytes,2,opt,name=controller"` }
AuthInfo holds information that describes how a client can get credentials to access the cluster. For example, OAuth2 client registration endpoints and supported flows, or Kerberos server locations.
type ClientGetter ¶ added in v0.9.0
type ClientGetter interface {
GetClient(ctx context.Context, clusterRef *corev1.ObjectReference, scheme *runtime.Scheme) (clt client.Client, err error)
}
ClientGetter interface get client for a clusterRef and given scheme
type Cluster ¶
type Cluster struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata // +optional metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Spec is the specification of the cluster. This may or may not be // reconciled by an active controller. // +optional Spec ClusterSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` // Status is the status of the cluster. // +optional Status ClusterStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` }
Cluster is the Schema for the clusters API +k8s:deepcopy-gen=false
type ClusterCondition ¶
type ClusterCondition struct { // Type is the type of the cluster condition. Type ClusterConditionType `json:"type" protobuf:"bytes,1,opt,name=type,casttype=ClusterConditionType"` // Status is the status of the condition. One of True, False, Unknown. Status v1.ConditionStatus `json:"status" protobuf:"bytes,2,opt,name=status,casttype=ConditionStatus"` // LastHeartbeatTime is the last time this condition was updated. // +optional LastHeartbeatTime metav1.Time `json:"lastHeartbeatTime,omitempty" protobuf:"bytes,3,opt,name=lastHeartbeatTime"` // LastTransitionTime is the last time the condition changed from one status to another. // +optional LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"` // Reason is a (brief) reason for the condition's last status change. // +optional Reason string `json:"reason,omitempty" protobuf:"bytes,5,opt,name=reason"` // Message is a human-readable message indicating details about the last status change. // +optional Message string `json:"message,omitempty" protobuf:"bytes,6,opt,name=message"` }
ClusterCondition contains condition information for a cluster.
type ClusterConditionType ¶
type ClusterConditionType string
ClusterConditionType marks the kind of cluster condition being reported.
const ( // ClusterOK means that the cluster is "OK". // // Since the cluster registry does not have a standard status controller, the // meaning of this condition is defined by the environment in which the // cluster is running. It is expected to mean that the cluster is reachable by // a controller that is reporting on its status, and that the cluster is ready // to have workloads scheduled. ClusterOK ClusterConditionType = "OK" )
type ClusterFilter ¶ added in v0.9.0
type ClusterFilter func(ctx context.Context, clusterRef corev1.ObjectReference) bool
ClusterFilter for filter cluster reousrces
func CustomResourceDefinitionExists ¶ added in v0.9.0
func CustomResourceDefinitionExists(cliGetter ClientGetter, CRDName string) ClusterFilter
CustomResourceDefinitionExists returns true if the CRD exists in the cluster
type ClusterList ¶ added in v0.9.0
type ClusterList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []Cluster `json:"items"` }
ClusterList represents a list of clusters
type ClusterManager ¶ added in v0.9.0
type ClusterManager struct { Concurrent int Filters []ClusterFilter }
ClusterManager manages clusters collection by filters
func (*ClusterManager) FilterClusters ¶ added in v0.9.0
func (m *ClusterManager) FilterClusters(ctx context.Context, clusterRefs []corev1.ObjectReference) []corev1.ObjectReference
FilterClusters returns a filtered list of clusters
type ClusterRegistryClient ¶
ClusterRegistryClient implements the deprecated cluster registry cluster resource multi cluster client https://github.com/kubernetes-retired/cluster-registry/blob/master/pkg/apis/clusterregistry/v1alpha1/types.go
func (*ClusterRegistryClient) GetClient ¶
func (m *ClusterRegistryClient) GetClient(ctx context.Context, clusterRef *corev1.ObjectReference, scheme *runtime.Scheme) (clt client.Client, err error)
GetClient returns a client using the cluster configuration
func (*ClusterRegistryClient) GetConfig ¶
func (m *ClusterRegistryClient) GetConfig(ctx context.Context, clusterRef *corev1.ObjectReference) (config *rest.Config, err error)
GetConfig returns the configuration based on the Cluster
func (*ClusterRegistryClient) GetConfigFromCluster ¶
func (m *ClusterRegistryClient) GetConfigFromCluster(ctx context.Context, cluster *unstructured.Unstructured) (config *rest.Config, err error)
func (*ClusterRegistryClient) GetDynamic ¶
func (m *ClusterRegistryClient) GetDynamic(ctx context.Context, clusterRef *corev1.ObjectReference) (dyn dynamic.Interface, err error)
GetDynamic returns a dynamic client using the cluster configuration
func (*ClusterRegistryClient) GetNamespaceClusters ¶ added in v0.7.0
func (m *ClusterRegistryClient) GetNamespaceClusters(ctx context.Context, namespace string) (clusterRefs []corev1.ObjectReference, err error)
GetNamespaceClusters returns a list of clusters related by namespace
func (*ClusterRegistryClient) ListClustersNamespaces ¶
func (m *ClusterRegistryClient) ListClustersNamespaces(ctx context.Context, namespace string) (clusterNamespaces map[*corev1.ObjectReference][]corev1.Namespace, err error)
ListClustersNamespaces will list namespace with name "namespace" in all clusters
func (*ClusterRegistryClient) StartWarmUpClientCache ¶ added in v0.7.0
func (m *ClusterRegistryClient) StartWarmUpClientCache(ctx context.Context)
StartWarmUpClientCache used to start warming the client cache, only needs to be called once.
type ClusterRegistryClientOption ¶ added in v0.11.0
type ClusterRegistryClientOption func(*ClusterRegistryClient)
ClusterRegistryClientOption functions for configuring a ClusterRegistryClient
func ClusterProxyInsecure ¶ added in v0.11.0
func ClusterProxyInsecure(insecure bool) ClusterRegistryClientOption
ClusterProxyInsecure allows specifying whether the client should use an insecure connection.
func ClusterProxyOption ¶ added in v0.11.0
func ClusterProxyOption(proxyHost string, proxyPath string) ClusterRegistryClientOption
ClusterProxyOption sets the proxy host and path for the cluster registry client
type ClusterSpec ¶
type ClusterSpec struct { // KubernetesAPIEndpoints represents the endpoints of the API server for this // cluster. // +optional KubernetesAPIEndpoints KubernetesAPIEndpoints `json:"kubernetesApiEndpoints,omitempty" protobuf:"bytes,1,opt,name=kubernetesApiEndpoints"` // AuthInfo contains public information that can be used to authenticate // to and authorize with this cluster. It is not meant to store private // information (e.g., tokens or client certificates) and cluster registry // implementations are not expected to provide hardened storage for // secrets. // +optional AuthInfo AuthInfo `json:"authInfo,omitempty" protobuf:"bytes,2,opt,name=authInfo"` }
ClusterSpec contains the specification of a cluster.
type ClusterStatus ¶
type ClusterStatus struct { // Conditions contains the different condition statuses for this cluster. Conditions []ClusterCondition `json:"conditions,omitempty" protobuf:"bytes,1,rep,name=conditions"` }
ClusterStatus contains the status of a cluster.
type ConfigGetter ¶ added in v0.10.0
type ConfigGetter interface { GetConfig(ctx context.Context, clusterRef *corev1.ObjectReference) (config *rest.Config, err error) GetConfigFromCluster(ctx context.Context, cluster *unstructured.Unstructured) (config *rest.Config, err error) }
ConfigGetter interface get config for a clusterRef
type CrossClusterSubjectReview ¶ added in v0.7.0
type CrossClusterSubjectReview struct { ClusterParameter string ClusterNamespace string // contains filtered or unexported fields }
CrossClusterSubjectReview describe a struct to get the client of special cluster and simulate the requesting user
func NewCrossClusterSubjectReview ¶ added in v0.7.0
func NewCrossClusterSubjectReview(mClient Interface, scheme *runtime.Scheme, restMapper meta.RESTMapper) *CrossClusterSubjectReview
NewCrossClusterSubjectReview constructs a new CrossClusterSubjectReview
func (*CrossClusterSubjectReview) GetClient ¶ added in v0.7.0
func (c *CrossClusterSubjectReview) GetClient(ctx context.Context, req *restful.Request) (client.Client, error)
GetClient get k8s client of the specified cluster and simulate the requesting user
func (*CrossClusterSubjectReview) SetClusterNamespace ¶ added in v0.7.0
func (c *CrossClusterSubjectReview) SetClusterNamespace(ns string)
SetClusterNamespace set the namespace which the cluster resource is stored in
func (*CrossClusterSubjectReview) SetClusterParameter ¶ added in v0.7.0
func (c *CrossClusterSubjectReview) SetClusterParameter(parameter string)
SetClusterParameter sets the cluster parameter name
type Interface ¶
type Interface interface { GetDynamic(ctx context.Context, clusterRef *corev1.ObjectReference) (dyn dynamic.Interface, err error) // ListClustersNamespaces lists all namespaces in all clusters // TODO: add this method to the interface and implementation ListClustersNamespaces(ctx context.Context, namespace string) (clusterNamespaces map[*corev1.ObjectReference][]corev1.Namespace, err error) // StartWarmUpClientCache used to start warming the client cache, only needs to be called once. StartWarmUpClientCache(ctx context.Context) // ClientGetter for getting client for a clusterRef and given scheme ClientGetter // NamespaceClustersGetter for getting list of clusters related by special namespace NamespaceClustersGetter // ConfigGetter for getting config for a clusterRef ConfigGetter }
Interface interface for a multi-cluster functionality
func MultiCluster ¶
MultiCluster returns a multicluster client in context
func NewClusterRegistryClient ¶
func NewClusterRegistryClient(config *rest.Config, options ...ClusterRegistryClientOption) (Interface, error)
NewClusterRegistryClient initiates a ClusterRegistryClient
func NewClusterRegistryClientOrDie ¶
func NewClusterRegistryClientOrDie(config *rest.Config, options ...ClusterRegistryClientOption) Interface
NewClusterRegistryClientOrDie initiates a ClusterRegistryClient and panics if it fails
type KubernetesAPIEndpoints ¶
type KubernetesAPIEndpoints struct { // ServerEndpoints specifies the address(es) of the Kubernetes API server’s // network identity or identities. // +optional ServerEndpoints []ServerAddressByClientCIDR `json:"serverEndpoints,omitempty" protobuf:"bytes,1,rep,name=serverEndpoints"` // CABundle contains the certificate authority information. // +optional CABundle []byte `json:"caBundle,omitempty" protobuf:"bytes,2,opt,name=caBundle"` }
KubernetesAPIEndpoints represents the endpoints for one and only one Kubernetes API server.
type NamespaceClustersGetter ¶ added in v0.9.0
type NamespaceClustersGetter interface {
GetNamespaceClusters(ctx context.Context, namespace string) ([]corev1.ObjectReference, error)
}
NamespaceClustersGetter interface get list of clusters related by special namespace
type ObjectReference ¶
type ObjectReference struct { // Kind contains the kind of the referent, e.g., Secret or ConfigMap // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds // +optional Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"` // Name contains the name of the referent. // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names // +optional Name string `json:"name,omitempty" protobuf:"bytes,2,opt,name=name"` // Namespace contains the namespace of the referent. // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ // +optional Namespace string `json:"namespace,omitempty" protobuf:"bytes,3,opt,name=namespace"` }
ObjectReference contains enough information to let you inspect or modify the referred object.
type ServerAddressByClientCIDR ¶
type ServerAddressByClientCIDR struct { // The CIDR with which clients can match their IP to figure out if they should // use the corresponding server address. // +optional ClientCIDR string `json:"clientCIDR,omitempty" protobuf:"bytes,1,opt,name=clientCIDR"` // Address of this server, suitable for a client that matches the above CIDR. // This can be a hostname, hostname:port, IP or IP:port. // +optional ServerAddress string `json:"serverAddress,omitempty" protobuf:"bytes,2,opt,name=serverAddress"` }
ServerAddressByClientCIDR helps clients determine the server address that they should use, depending on the ClientCIDR that they match.