mirror of
https://github.com/kairos-io/entangle.git
synced 2025-05-15 03:39:29 +00:00
371 lines
24 KiB
YAML
371 lines
24 KiB
YAML
---
|
|
apiVersion: apiextensions.k8s.io/v1
|
|
kind: CustomResourceDefinition
|
|
metadata:
|
|
annotations:
|
|
controller-gen.kubebuilder.io/version: v0.9.0
|
|
creationTimestamp: null
|
|
name: entanglements.entangle.kairos.io
|
|
spec:
|
|
group: entangle.kairos.io
|
|
names:
|
|
kind: Entanglement
|
|
listKind: EntanglementList
|
|
plural: entanglements
|
|
singular: entanglement
|
|
scope: Namespaced
|
|
versions:
|
|
- name: v1alpha1
|
|
schema:
|
|
openAPIV3Schema:
|
|
description: Entanglement is the Schema for the entanglements API
|
|
properties:
|
|
apiVersion:
|
|
description: 'APIVersion defines the versioned schema of this representation
|
|
of an object. Servers should convert recognized schemas to the latest
|
|
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
|
|
type: string
|
|
kind:
|
|
description: 'Kind is a string value representing the REST resource this
|
|
object represents. Servers may infer this from the endpoint the client
|
|
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
|
|
type: string
|
|
metadata:
|
|
type: object
|
|
spec:
|
|
description: EntanglementSpec defines the desired state of Entanglement
|
|
properties:
|
|
host:
|
|
type: string
|
|
hostNetwork:
|
|
type: boolean
|
|
inbound:
|
|
type: boolean
|
|
port:
|
|
type: string
|
|
secretRef:
|
|
type: string
|
|
serviceRef:
|
|
type: string
|
|
serviceSpec:
|
|
description: ServiceSpec describes the attributes that a user creates
|
|
on a service.
|
|
properties:
|
|
allocateLoadBalancerNodePorts:
|
|
description: allocateLoadBalancerNodePorts defines if NodePorts
|
|
will be automatically allocated for services with type LoadBalancer. Default
|
|
is "true". It may be set to "false" if the cluster load-balancer
|
|
does not rely on NodePorts. If the caller requests specific
|
|
NodePorts (by specifying a value), those requests will be respected,
|
|
regardless of this field. This field may only be set for services
|
|
with type LoadBalancer and will be cleared if the type is changed
|
|
to any other type.
|
|
type: boolean
|
|
clusterIP:
|
|
description: 'clusterIP is the IP address of the service and is
|
|
usually assigned randomly. If an address is specified manually,
|
|
is in-range (as per system configuration), and is not in use,
|
|
it will be allocated to the service; otherwise creation of the
|
|
service will fail. This field may not be changed through updates
|
|
unless the type field is also being changed to ExternalName
|
|
(which requires this field to be blank) or the type field is
|
|
being changed from ExternalName (in which case this field may
|
|
optionally be specified, as describe above). Valid values are
|
|
"None", empty string (""), or a valid IP address. Setting this
|
|
to "None" makes a "headless service" (no virtual IP), which
|
|
is useful when direct endpoint connections are preferred and
|
|
proxying is not required. Only applies to types ClusterIP,
|
|
NodePort, and LoadBalancer. If this field is specified when
|
|
creating a Service of type ExternalName, creation will fail.
|
|
This field will be wiped when updating a Service to type ExternalName.
|
|
More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
|
|
type: string
|
|
clusterIPs:
|
|
description: "ClusterIPs is a list of IP addresses assigned to
|
|
this service, and are usually assigned randomly. If an address
|
|
is specified manually, is in-range (as per system configuration),
|
|
and is not in use, it will be allocated to the service; otherwise
|
|
creation of the service will fail. This field may not be changed
|
|
through updates unless the type field is also being changed
|
|
to ExternalName (which requires this field to be empty) or the
|
|
type field is being changed from ExternalName (in which case
|
|
this field may optionally be specified, as describe above).
|
|
\ Valid values are \"None\", empty string (\"\"), or a valid
|
|
IP address. Setting this to \"None\" makes a \"headless service\"
|
|
(no virtual IP), which is useful when direct endpoint connections
|
|
are preferred and proxying is not required. Only applies to
|
|
types ClusterIP, NodePort, and LoadBalancer. If this field is
|
|
specified when creating a Service of type ExternalName, creation
|
|
will fail. This field will be wiped when updating a Service
|
|
to type ExternalName. If this field is not specified, it will
|
|
be initialized from the clusterIP field. If this field is specified,
|
|
clients must ensure that clusterIPs[0] and clusterIP have the
|
|
same value. \n This field may hold a maximum of two entries
|
|
(dual-stack IPs, in either order). These IPs must correspond
|
|
to the values of the ipFamilies field. Both clusterIPs and ipFamilies
|
|
are governed by the ipFamilyPolicy field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies"
|
|
items:
|
|
type: string
|
|
type: array
|
|
x-kubernetes-list-type: atomic
|
|
externalIPs:
|
|
description: externalIPs is a list of IP addresses for which nodes
|
|
in the cluster will also accept traffic for this service. These
|
|
IPs are not managed by Kubernetes. The user is responsible
|
|
for ensuring that traffic arrives at a node with this IP. A
|
|
common example is external load-balancers that are not part
|
|
of the Kubernetes system.
|
|
items:
|
|
type: string
|
|
type: array
|
|
externalName:
|
|
description: externalName is the external reference that discovery
|
|
mechanisms will return as an alias for this service (e.g. a
|
|
DNS CNAME record). No proxying will be involved. Must be a
|
|
lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123)
|
|
and requires `type` to be "ExternalName".
|
|
type: string
|
|
externalTrafficPolicy:
|
|
description: externalTrafficPolicy denotes if this Service desires
|
|
to route external traffic to node-local or cluster-wide endpoints.
|
|
"Local" preserves the client source IP and avoids a second hop
|
|
for LoadBalancer and Nodeport type services, but risks potentially
|
|
imbalanced traffic spreading. "Cluster" obscures the client
|
|
source IP and may cause a second hop to another node, but should
|
|
have good overall load-spreading.
|
|
type: string
|
|
healthCheckNodePort:
|
|
description: healthCheckNodePort specifies the healthcheck nodePort
|
|
for the service. This only applies when type is set to LoadBalancer
|
|
and externalTrafficPolicy is set to Local. If a value is specified,
|
|
is in-range, and is not in use, it will be used. If not specified,
|
|
a value will be automatically allocated. External systems (e.g.
|
|
load-balancers) can use this port to determine if a given node
|
|
holds endpoints for this service or not. If this field is specified
|
|
when creating a Service which does not need it, creation will
|
|
fail. This field will be wiped when updating a Service to no
|
|
longer need it (e.g. changing type).
|
|
format: int32
|
|
type: integer
|
|
internalTrafficPolicy:
|
|
description: InternalTrafficPolicy specifies if the cluster internal
|
|
traffic should be routed to all endpoints or node-local endpoints
|
|
only. "Cluster" routes internal traffic to a Service to all
|
|
endpoints. "Local" routes traffic to node-local endpoints only,
|
|
traffic is dropped if no node-local endpoints are ready. The
|
|
default value is "Cluster".
|
|
type: string
|
|
ipFamilies:
|
|
description: "IPFamilies is a list of IP families (e.g. IPv4,
|
|
IPv6) assigned to this service. This field is usually assigned
|
|
automatically based on cluster configuration and the ipFamilyPolicy
|
|
field. If this field is specified manually, the requested family
|
|
is available in the cluster, and ipFamilyPolicy allows it, it
|
|
will be used; otherwise creation of the service will fail. This
|
|
field is conditionally mutable: it allows for adding or removing
|
|
a secondary IP family, but it does not allow changing the primary
|
|
IP family of the Service. Valid values are \"IPv4\" and \"IPv6\".
|
|
\ This field only applies to Services of types ClusterIP, NodePort,
|
|
and LoadBalancer, and does apply to \"headless\" services. This
|
|
field will be wiped when updating a Service to type ExternalName.
|
|
\n This field may hold a maximum of two entries (dual-stack
|
|
families, in either order). These families must correspond
|
|
to the values of the clusterIPs field, if specified. Both clusterIPs
|
|
and ipFamilies are governed by the ipFamilyPolicy field."
|
|
items:
|
|
description: IPFamily represents the IP Family (IPv4 or IPv6).
|
|
This type is used to express the family of an IP expressed
|
|
by a type (e.g. service.spec.ipFamilies).
|
|
type: string
|
|
type: array
|
|
x-kubernetes-list-type: atomic
|
|
ipFamilyPolicy:
|
|
description: IPFamilyPolicy represents the dual-stack-ness requested
|
|
or required by this Service. If there is no value provided,
|
|
then this field will be set to SingleStack. Services can be
|
|
"SingleStack" (a single IP family), "PreferDualStack" (two IP
|
|
families on dual-stack configured clusters or a single IP family
|
|
on single-stack clusters), or "RequireDualStack" (two IP families
|
|
on dual-stack configured clusters, otherwise fail). The ipFamilies
|
|
and clusterIPs fields depend on the value of this field. This
|
|
field will be wiped when updating a service to type ExternalName.
|
|
type: string
|
|
loadBalancerClass:
|
|
description: loadBalancerClass is the class of the load balancer
|
|
implementation this Service belongs to. If specified, the value
|
|
of this field must be a label-style identifier, with an optional
|
|
prefix, e.g. "internal-vip" or "example.com/internal-vip". Unprefixed
|
|
names are reserved for end-users. This field can only be set
|
|
when the Service type is 'LoadBalancer'. If not set, the default
|
|
load balancer implementation is used, today this is typically
|
|
done through the cloud provider integration, but should apply
|
|
for any default implementation. If set, it is assumed that a
|
|
load balancer implementation is watching for Services with a
|
|
matching class. Any default load balancer implementation (e.g.
|
|
cloud providers) should ignore Services that set this field.
|
|
This field can only be set when creating or updating a Service
|
|
to type 'LoadBalancer'. Once set, it can not be changed. This
|
|
field will be wiped when a service is updated to a non 'LoadBalancer'
|
|
type.
|
|
type: string
|
|
loadBalancerIP:
|
|
description: 'Only applies to Service Type: LoadBalancer. This
|
|
feature depends on whether the underlying cloud-provider supports
|
|
specifying the loadBalancerIP when a load balancer is created.
|
|
This field will be ignored if the cloud-provider does not support
|
|
the feature. Deprecated: This field was under-specified and
|
|
its meaning varies across implementations, and it cannot support
|
|
dual-stack. As of Kubernetes v1.24, users are encouraged to
|
|
use implementation-specific annotations when available. This
|
|
field may be removed in a future API version.'
|
|
type: string
|
|
loadBalancerSourceRanges:
|
|
description: 'If specified and supported by the platform, this
|
|
will restrict traffic through the cloud-provider load-balancer
|
|
will be restricted to the specified client IPs. This field will
|
|
be ignored if the cloud-provider does not support the feature."
|
|
More info: https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/'
|
|
items:
|
|
type: string
|
|
type: array
|
|
ports:
|
|
description: 'The list of ports that are exposed by this service.
|
|
More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
|
|
items:
|
|
description: ServicePort contains information on service's port.
|
|
properties:
|
|
appProtocol:
|
|
description: The application protocol for this port. This
|
|
field follows standard Kubernetes label syntax. Un-prefixed
|
|
names are reserved for IANA standard service names (as
|
|
per RFC-6335 and https://www.iana.org/assignments/service-names).
|
|
Non-standard protocols should use prefixed names such
|
|
as mycompany.com/my-custom-protocol.
|
|
type: string
|
|
name:
|
|
description: The name of this port within the service. This
|
|
must be a DNS_LABEL. All ports within a ServiceSpec must
|
|
have unique names. When considering the endpoints for
|
|
a Service, this must match the 'name' field in the EndpointPort.
|
|
Optional if only one ServicePort is defined on this service.
|
|
type: string
|
|
nodePort:
|
|
description: 'The port on each node on which this service
|
|
is exposed when type is NodePort or LoadBalancer. Usually
|
|
assigned by the system. If a value is specified, in-range,
|
|
and not in use it will be used, otherwise the operation
|
|
will fail. If not specified, a port will be allocated
|
|
if this Service requires one. If this field is specified
|
|
when creating a Service which does not need it, creation
|
|
will fail. This field will be wiped when updating a Service
|
|
to no longer need it (e.g. changing type from NodePort
|
|
to ClusterIP). More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport'
|
|
format: int32
|
|
type: integer
|
|
port:
|
|
description: The port that will be exposed by this service.
|
|
format: int32
|
|
type: integer
|
|
protocol:
|
|
default: TCP
|
|
description: The IP protocol for this port. Supports "TCP",
|
|
"UDP", and "SCTP". Default is TCP.
|
|
type: string
|
|
targetPort:
|
|
anyOf:
|
|
- type: integer
|
|
- type: string
|
|
description: 'Number or name of the port to access on the
|
|
pods targeted by the service. Number must be in the range
|
|
1 to 65535. Name must be an IANA_SVC_NAME. If this is
|
|
a string, it will be looked up as a named port in the
|
|
target Pod''s container ports. If this is not specified,
|
|
the value of the ''port'' field is used (an identity map).
|
|
This field is ignored for services with clusterIP=None,
|
|
and should be omitted or set equal to the ''port'' field.
|
|
More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service'
|
|
x-kubernetes-int-or-string: true
|
|
required:
|
|
- port
|
|
type: object
|
|
type: array
|
|
x-kubernetes-list-map-keys:
|
|
- port
|
|
- protocol
|
|
x-kubernetes-list-type: map
|
|
publishNotReadyAddresses:
|
|
description: publishNotReadyAddresses indicates that any agent
|
|
which deals with endpoints for this Service should disregard
|
|
any indications of ready/not-ready. The primary use case for
|
|
setting this field is for a StatefulSet's Headless Service to
|
|
propagate SRV DNS records for its Pods for the purpose of peer
|
|
discovery. The Kubernetes controllers that generate Endpoints
|
|
and EndpointSlice resources for Services interpret this to mean
|
|
that all endpoints are considered "ready" even if the Pods themselves
|
|
are not. Agents which consume only Kubernetes generated endpoints
|
|
through the Endpoints or EndpointSlice resources can safely
|
|
assume this behavior.
|
|
type: boolean
|
|
selector:
|
|
additionalProperties:
|
|
type: string
|
|
description: 'Route service traffic to pods with label keys and
|
|
values matching this selector. If empty or not present, the
|
|
service is assumed to have an external process managing its
|
|
endpoints, which Kubernetes will not modify. Only applies to
|
|
types ClusterIP, NodePort, and LoadBalancer. Ignored if type
|
|
is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/'
|
|
type: object
|
|
x-kubernetes-map-type: atomic
|
|
sessionAffinity:
|
|
description: 'Supports "ClientIP" and "None". Used to maintain
|
|
session affinity. Enable client IP based session affinity. Must
|
|
be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies'
|
|
type: string
|
|
sessionAffinityConfig:
|
|
description: sessionAffinityConfig contains the configurations
|
|
of session affinity.
|
|
properties:
|
|
clientIP:
|
|
description: clientIP contains the configurations of Client
|
|
IP based session affinity.
|
|
properties:
|
|
timeoutSeconds:
|
|
description: timeoutSeconds specifies the seconds of ClientIP
|
|
type session sticky time. The value must be >0 && <=86400(for
|
|
1 day) if ServiceAffinity == "ClientIP". Default value
|
|
is 10800(for 3 hours).
|
|
format: int32
|
|
type: integer
|
|
type: object
|
|
type: object
|
|
type:
|
|
description: 'type determines how the Service is exposed. Defaults
|
|
to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort,
|
|
and LoadBalancer. "ClusterIP" allocates a cluster-internal IP
|
|
address for load-balancing to endpoints. Endpoints are determined
|
|
by the selector or if that is not specified, by manual construction
|
|
of an Endpoints object or EndpointSlice objects. If clusterIP
|
|
is "None", no virtual IP is allocated and the endpoints are
|
|
published as a set of endpoints rather than a virtual IP. "NodePort"
|
|
builds on ClusterIP and allocates a port on every node which
|
|
routes to the same endpoints as the clusterIP. "LoadBalancer"
|
|
builds on NodePort and creates an external load-balancer (if
|
|
supported in the current cloud) which routes to the same endpoints
|
|
as the clusterIP. "ExternalName" aliases this service to the
|
|
specified externalName. Several other fields do not apply to
|
|
ExternalName services. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types'
|
|
type: string
|
|
type: object
|
|
serviceUUID:
|
|
type: string
|
|
type: object
|
|
status:
|
|
description: EntanglementStatus defines the observed state of Entanglement
|
|
type: object
|
|
type: object
|
|
served: true
|
|
storage: true
|
|
subresources:
|
|
status: {}
|