mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 20:53:33 +00:00
Updated types API to include session affinity. …
- changed CLIENT-IP and NONE to be ClientIP and None respectively - updated conversions to support translating between api versions. - updated validations to validate session affinity type if specified.
This commit is contained in:
parent
ff305003f0
commit
569ce87f0e
@ -572,6 +572,17 @@ type ServiceList struct {
|
|||||||
Items []Service `json:"items"`
|
Items []Service `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Session Affinity Type string
|
||||||
|
type AffinityType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// AffinityTypeClientIP is the Client IP based.
|
||||||
|
AffinityTypeClientIP AffinityType = "ClientIP"
|
||||||
|
|
||||||
|
// AffinityTypeNone - no session affinity.
|
||||||
|
AffinityTypeNone AffinityType = "None"
|
||||||
|
)
|
||||||
|
|
||||||
// ServiceStatus represents the current status of a service
|
// ServiceStatus represents the current status of a service
|
||||||
type ServiceStatus struct{}
|
type ServiceStatus struct{}
|
||||||
|
|
||||||
@ -606,6 +617,9 @@ type ServiceSpec struct {
|
|||||||
// ContainerPort is the name of the port on the container to direct traffic to.
|
// ContainerPort is the name of the port on the container to direct traffic to.
|
||||||
// Optional, if unspecified use the first port on the container.
|
// Optional, if unspecified use the first port on the container.
|
||||||
ContainerPort util.IntOrString `json:"containerPort,omitempty"`
|
ContainerPort util.IntOrString `json:"containerPort,omitempty"`
|
||||||
|
|
||||||
|
// Optional: Supports "ClientIP" and "None". Used to maintain session affinity.
|
||||||
|
SessionAffinity *AffinityType `json:"sessionAffinity,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Service is a named abstraction of software service (for example, mysql) consisting of local port
|
// Service is a named abstraction of software service (for example, mysql) consisting of local port
|
||||||
|
@ -436,6 +436,10 @@ func init() {
|
|||||||
out.ContainerPort = in.Spec.ContainerPort
|
out.ContainerPort = in.Spec.ContainerPort
|
||||||
out.PortalIP = in.Spec.PortalIP
|
out.PortalIP = in.Spec.PortalIP
|
||||||
out.ProxyPort = in.Spec.ProxyPort
|
out.ProxyPort = in.Spec.ProxyPort
|
||||||
|
if err := s.Convert(&in.Spec.SessionAffinity, &out.SessionAffinity, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
func(in *Service, out *newer.Service, s conversion.Scope) error {
|
func(in *Service, out *newer.Service, s conversion.Scope) error {
|
||||||
@ -459,6 +463,10 @@ func init() {
|
|||||||
out.Spec.ContainerPort = in.ContainerPort
|
out.Spec.ContainerPort = in.ContainerPort
|
||||||
out.Spec.PortalIP = in.PortalIP
|
out.Spec.PortalIP = in.PortalIP
|
||||||
out.Spec.ProxyPort = in.ProxyPort
|
out.Spec.ProxyPort = in.ProxyPort
|
||||||
|
if err := s.Convert(&in.SessionAffinity, &out.Spec.SessionAffinity, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -448,6 +448,17 @@ type PodTemplate struct {
|
|||||||
Labels map[string]string `json:"labels,omitempty" description:"map of string keys and values that can be used to organize and categorize the pods created from the template; must match the selector of the replication controller to which the template belongs; may match selectors of services"`
|
Labels map[string]string `json:"labels,omitempty" description:"map of string keys and values that can be used to organize and categorize the pods created from the template; must match the selector of the replication controller to which the template belongs; may match selectors of services"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Session Affinity Type string
|
||||||
|
type AffinityType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// AffinityTypeClientIP is the Client IP based.
|
||||||
|
AffinityTypeClientIP AffinityType = "ClientIP"
|
||||||
|
|
||||||
|
// AffinityTypeNone - no session affinity.
|
||||||
|
AffinityTypeNone AffinityType = "None"
|
||||||
|
)
|
||||||
|
|
||||||
// ServiceList holds a list of services.
|
// ServiceList holds a list of services.
|
||||||
type ServiceList struct {
|
type ServiceList struct {
|
||||||
TypeMeta `json:",inline"`
|
TypeMeta `json:",inline"`
|
||||||
@ -487,6 +498,9 @@ type Service struct {
|
|||||||
|
|
||||||
// ProxyPort is assigned by the master. If specified by the user it will be ignored.
|
// ProxyPort is assigned by the master. If specified by the user it will be ignored.
|
||||||
ProxyPort int `json:"proxyPort,omitempty" description:"if non-zero, a pre-allocated host port used for this service by the proxy on each node; assigned by the master and ignored on input"`
|
ProxyPort int `json:"proxyPort,omitempty" description:"if non-zero, a pre-allocated host port used for this service by the proxy on each node; assigned by the master and ignored on input"`
|
||||||
|
|
||||||
|
// Optional: Supports "ClientIP" and "None". Used to maintain session affinity.
|
||||||
|
SessionAffinity *AffinityType `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; Disabled if unspecified"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Endpoints is a collection of endpoints that implement the actual service, for example:
|
// Endpoints is a collection of endpoints that implement the actual service, for example:
|
||||||
|
@ -352,6 +352,9 @@ func init() {
|
|||||||
out.ContainerPort = in.Spec.ContainerPort
|
out.ContainerPort = in.Spec.ContainerPort
|
||||||
out.PortalIP = in.Spec.PortalIP
|
out.PortalIP = in.Spec.PortalIP
|
||||||
out.ProxyPort = in.Spec.ProxyPort
|
out.ProxyPort = in.Spec.ProxyPort
|
||||||
|
if err := s.Convert(&in.Spec.SessionAffinity, &out.SessionAffinity, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
@ -376,6 +379,9 @@ func init() {
|
|||||||
out.Spec.ContainerPort = in.ContainerPort
|
out.Spec.ContainerPort = in.ContainerPort
|
||||||
out.Spec.PortalIP = in.PortalIP
|
out.Spec.PortalIP = in.PortalIP
|
||||||
out.Spec.ProxyPort = in.ProxyPort
|
out.Spec.ProxyPort = in.ProxyPort
|
||||||
|
if err := s.Convert(&in.SessionAffinity, &out.Spec.SessionAffinity, 0); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
@ -413,6 +413,17 @@ type PodTemplate struct {
|
|||||||
Labels map[string]string `json:"labels,omitempty" description:"map of string keys and values that can be used to organize and categorize the pods created from the template; must match the selector of the replication controller to which the template belongs; may match selectors of services"`
|
Labels map[string]string `json:"labels,omitempty" description:"map of string keys and values that can be used to organize and categorize the pods created from the template; must match the selector of the replication controller to which the template belongs; may match selectors of services"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Session Affinity Type string
|
||||||
|
type AffinityType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// AffinityTypeClientIP is the Client IP based.
|
||||||
|
AffinityTypeClientIP AffinityType = "ClientIP"
|
||||||
|
|
||||||
|
// AffinityTypeNone - no session affinity.
|
||||||
|
AffinityTypeNone AffinityType = "None"
|
||||||
|
)
|
||||||
|
|
||||||
// ServiceList holds a list of services.
|
// ServiceList holds a list of services.
|
||||||
type ServiceList struct {
|
type ServiceList struct {
|
||||||
TypeMeta `json:",inline"`
|
TypeMeta `json:",inline"`
|
||||||
@ -452,6 +463,9 @@ type Service struct {
|
|||||||
|
|
||||||
// ProxyPort is assigned by the master. If specified by the user it will be ignored.
|
// ProxyPort is assigned by the master. If specified by the user it will be ignored.
|
||||||
ProxyPort int `json:"proxyPort,omitempty" description:"if non-zero, a pre-allocated host port used for this service by the proxy on each node; assigned by the master and ignored on input"`
|
ProxyPort int `json:"proxyPort,omitempty" description:"if non-zero, a pre-allocated host port used for this service by the proxy on each node; assigned by the master and ignored on input"`
|
||||||
|
|
||||||
|
// Optional: Supports "ClientIP" and "None". Used to maintain session affinity.
|
||||||
|
SessionAffinity *AffinityType `json:"sessionAffinity,omitempty" description:"enable client IP based session affinity; must be ClientIP or None; Disabled if unspecified"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Endpoints is a collection of endpoints that implement the actual service, for example:
|
// Endpoints is a collection of endpoints that implement the actual service, for example:
|
||||||
|
@ -604,6 +604,17 @@ type ReplicationControllerList struct {
|
|||||||
Items []ReplicationController `json:"items"`
|
Items []ReplicationController `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Session Affinity Type string
|
||||||
|
type AffinityType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
// AffinityTypeClientIP is the Client IP based.
|
||||||
|
AffinityTypeClientIP AffinityType = "ClientIP"
|
||||||
|
|
||||||
|
// AffinityTypeNone - no session affinity.
|
||||||
|
AffinityTypeNone AffinityType = "None"
|
||||||
|
)
|
||||||
|
|
||||||
// ServiceStatus represents the current status of a service
|
// ServiceStatus represents the current status of a service
|
||||||
type ServiceStatus struct{}
|
type ServiceStatus struct{}
|
||||||
|
|
||||||
@ -635,6 +646,9 @@ type ServiceSpec struct {
|
|||||||
// ContainerPort is the name of the port on the container to direct traffic to.
|
// ContainerPort is the name of the port on the container to direct traffic to.
|
||||||
// Optional, if unspecified use the first port on the container.
|
// Optional, if unspecified use the first port on the container.
|
||||||
ContainerPort util.IntOrString `json:"containerPort,omitempty"`
|
ContainerPort util.IntOrString `json:"containerPort,omitempty"`
|
||||||
|
|
||||||
|
// Optional: Supports "ClientIP" and "None". Used to maintain session affinity.
|
||||||
|
SessionAffinity *AffinityType `json:"sessionAffinity,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Service is a named abstraction of software service (for example, mysql) consisting of local port
|
// Service is a named abstraction of software service (for example, mysql) consisting of local port
|
||||||
|
@ -414,6 +414,8 @@ func ValidatePodUpdate(newPod, oldPod *api.Pod) errs.ValidationErrorList {
|
|||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var supportedSessionAffinityType = util.NewStringSet(string(api.AffinityTypeClientIP), string(api.AffinityTypeNone))
|
||||||
|
|
||||||
// ValidateService tests if required fields in the service are set.
|
// ValidateService tests if required fields in the service are set.
|
||||||
func ValidateService(service *api.Service, lister ServiceLister, ctx api.Context) errs.ValidationErrorList {
|
func ValidateService(service *api.Service, lister ServiceLister, ctx api.Context) errs.ValidationErrorList {
|
||||||
allErrs := errs.ValidationErrorList{}
|
allErrs := errs.ValidationErrorList{}
|
||||||
@ -454,6 +456,12 @@ func ValidateService(service *api.Service, lister ServiceLister, ctx api.Context
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if service.Spec.SessionAffinity != nil {
|
||||||
|
if !supportedSessionAffinityType.Has(string(*service.Spec.SessionAffinity)) {
|
||||||
|
allErrs = append(allErrs, errs.NewFieldNotSupported("spec.sessionAffinity", service.Spec.SessionAffinity))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return allErrs
|
return allErrs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user