Documentation ¶
Index ¶
- Constants
- Variables
- func NewHandlerFuncWithHistogram(handler http.HandlerFunc, histogram *prometheus.HistogramVec) http.HandlerFunc
- func ResponseCodeToError(responseCode types.ResponseCode) error
- type CNIConflistGenerator
- type CNSRESTError
- type EndpointInfo
- type GetEndpointResponse
- type GetHTTPServiceDataResponse
- type HTTPRestService
- func (service *HTTPRestService) AssignAvailableIPConfigs(podInfo cns.PodInfo) ([]cns.PodIpInfo, error)
- func (service *HTTPRestService) AssignDesiredIPConfigs(podInfo cns.PodInfo, desiredIPAddresses []string) ([]cns.PodIpInfo, error)
- func (service *HTTPRestService) AttachIPConfigsHandlerMiddleware(middleware cns.IPConfigsHandlerMiddleware)
- func (service *HTTPRestService) CreateHostNCApipaEndpoint(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) CreateOrUpdateNetworkContainerInternal(req *cns.CreateNetworkContainerRequest) types.ResponseCode
- func (service *HTTPRestService) DeleteHostNCApipaEndpoint(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) DeleteNetworkContainerInternal(req cns.DeleteNetworkContainerRequest) types.ResponseCode
- func (service *HTTPRestService) EndpointHandlerAPI(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) GetAllNetworkContainers(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) GetAssignedIPConfigs() []cns.IPConfigurationStatus
- func (service *HTTPRestService) GetAvailableIPConfigs() []cns.IPConfigurationStatus
- func (service *HTTPRestService) GetEndpointHandler(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) GetEndpointHelper(endpointID string) (*EndpointInfo, error)
- func (service *HTTPRestService) GetExistingIPConfig(podInfo cns.PodInfo) ([]cns.PodIpInfo, bool, error)
- func (service *HTTPRestService) GetNetworkContainerByOrchestratorContext(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) GetNetworkContainerInternal(req cns.GetNetworkContainerRequest) (cns.GetNetworkContainerResponse, types.ResponseCode)
- func (service *HTTPRestService) GetPartitionKey() (dncPartitionKey string)
- func (service *HTTPRestService) GetPendingProgramIPConfigs() []cns.IPConfigurationStatus
- func (service *HTTPRestService) GetPendingReleaseIPConfigs() []cns.IPConfigurationStatus
- func (service *HTTPRestService) GetPodIPConfigState() map[string]cns.IPConfigurationStatus
- func (service *HTTPRestService) HandleDebugIPAddresses(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) HandleDebugPodContext(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) HandleDebugRestData(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) Init(config *common.ServiceConfig) error
- func (service *HTTPRestService) MarkExistingIPsAsPendingRelease(pendingIPIDs []string) error
- func (service *HTTPRestService) MarkIPAsPendingRelease(totalIpsToRelease int) (map[string]cns.IPConfigurationStatus, error)
- func (service *HTTPRestService) MarkIpsAsAvailableUntransacted(ncID string, newHostNCVersion int)
- func (service *HTTPRestService) MarkNIPsPendingRelease(n int) (map[string]cns.IPConfigurationStatus, error)
- func (service *HTTPRestService) MustEnsureNoStaleNCs(validNCIDs []string)
- func (service *HTTPRestService) MustGenerateCNIConflistOnce()
- func (service *HTTPRestService) ReconcileIPAMState(ncReqs []*cns.CreateNetworkContainerRequest, ...) types.ResponseCode
- func (service *HTTPRestService) RegisterPProfEndpoints()
- func (service *HTTPRestService) ReleaseIPConfigHandler(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) ReleaseIPConfigHandlerHelper(ctx context.Context, ipconfigsRequest cns.IPConfigsRequest) (*cns.IPConfigsResponse, error)
- func (service *HTTPRestService) ReleaseIPConfigsHandler(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) RequestIPConfigHandler(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) RequestIPConfigsHandler(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) SendNCSnapShotPeriodically(ctx context.Context, ncSnapshotIntervalInMinutes int)
- func (service *HTTPRestService) SetNodeOrchestrator(r *cns.SetOrchestratorTypeRequest)
- func (service *HTTPRestService) Start(config *common.ServiceConfig) error
- func (service *HTTPRestService) Stop()
- func (service *HTTPRestService) SyncHostNCVersion(ctx context.Context, channelMode string)
- func (service *HTTPRestService) SyncNodeStatus(dncEP, infraVnet, nodeID string, contextFromCNI json.RawMessage) (returnCode types.ResponseCode, errStr string)
- func (service *HTTPRestService) UpdateEndpointHandler(w http.ResponseWriter, r *http.Request)
- func (service *HTTPRestService) UpdateEndpointHelper(endpointID string, req map[string]*IPInfo) error
- type HTTPRestServiceData
- type HomeAzMonitor
- type IPInfo
- type NoOpConflistGenerator
- type Response
Constants ¶
const ( GetHomeAzAPIName = "GetHomeAz" ContextTimeOut = 5 * time.Second )
const ( ContainerIDLength = 8 InfraInterfaceName = "eth0" )
const (
EndpointStoreKey = "Endpoints"
)
const SWIFT = "SWIFT-POSTROUTING"
Variables ¶
var ( ErrStoreEmpty = errors.New("empty endpoint state store") ErrParsePodIPFailed = errors.New("failed to parse pod's ip") ErrNoNCs = errors.New("no NCs found in the CNS internal state") ErrOptManageEndpointState = errors.New("CNS is not set to manage the endpoint state") ErrEndpointStateNotFound = errors.New("endpoint state could not be found in the statefile") )
var (
ErrInvalidNcURLFormat = errors.New("Invalid network container url format")
)
var ( HTTPRequestLatency = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "http_request_latency_seconds", Help: "Request latency in seconds by endpoint, verb, and response code.", Buckets: prometheus.ExponentialBuckets(0.001, 2, 15), }, []string{"url", "verb", "cns_return_code"}, ) )
Functions ¶
func NewHandlerFuncWithHistogram ¶ added in v1.5.26
func NewHandlerFuncWithHistogram(handler http.HandlerFunc, histogram *prometheus.HistogramVec) http.HandlerFunc
func ResponseCodeToError ¶
func ResponseCodeToError(responseCode types.ResponseCode) error
ResponseCodeToError converts a cns response code to error type. If the response code is OK, then return value is nil
Types ¶
type CNIConflistGenerator ¶
type CNSRESTError ¶
type CNSRESTError struct {
ResponseCode types.ResponseCode
}
CNSRESTError represents a CNS error
func (*CNSRESTError) Error ¶
func (c *CNSRESTError) Error() string
type EndpointInfo ¶
type GetEndpointResponse ¶ added in v1.5.17
type GetEndpointResponse struct { Response Response `json:"response"` EndpointInfo EndpointInfo `json:"endpointInfo"` }
GetEndpointResponse describes response from the The GetEndpoint API.
type GetHTTPServiceDataResponse ¶
type GetHTTPServiceDataResponse struct { HTTPRestServiceData HTTPRestServiceData `json:"HTTPRestServiceData"` Response Response `json:"Response"` }
type HTTPRestService ¶
type HTTPRestService struct { *cns.Service PodIPIDByPodInterfaceKey map[string][]string // PodInterfaceId is key and value is slice of Pod IP (SecondaryIP) uuids. PodIPConfigState map[string]cns.IPConfigurationStatus // Secondary IP ID(uuid) is key sync.RWMutex EndpointState map[string]*EndpointInfo // key : container id EndpointStateStore store.KeyValueStore IPConfigsHandlerMiddleware cns.IPConfigsHandlerMiddleware // contains filtered or unexported fields }
HTTPRestService represents http listener for CNS - Container Networking Service.
func NewHTTPRestService ¶
func NewHTTPRestService(config *common.ServiceConfig, wscli interfaceGetter, wsproxy wireserverProxy, nmagentClient nmagentClient, endpointStateStore store.KeyValueStore, gen CNIConflistGenerator, homeAzMonitor *HomeAzMonitor, ) (*HTTPRestService, error)
NewHTTPRestService creates a new HTTP Service object.
func (*HTTPRestService) AssignAvailableIPConfigs ¶
func (service *HTTPRestService) AssignAvailableIPConfigs(podInfo cns.PodInfo) ([]cns.PodIpInfo, error)
Assigns an available IP from each NC on the NNC. If there is one NC then we expect to only have one IP return In the case of dualstack we would expect to have one IPv6 from one NC and one IPv4 from a second NC
func (*HTTPRestService) AssignDesiredIPConfigs ¶
func (service *HTTPRestService) AssignDesiredIPConfigs(podInfo cns.PodInfo, desiredIPAddresses []string) ([]cns.PodIpInfo, error)
Assigns a pod with all IPs desired
func (*HTTPRestService) AttachIPConfigsHandlerMiddleware ¶ added in v1.5.19
func (service *HTTPRestService) AttachIPConfigsHandlerMiddleware(middleware cns.IPConfigsHandlerMiddleware)
func (*HTTPRestService) CreateHostNCApipaEndpoint ¶ added in v1.5.26
func (service *HTTPRestService) CreateHostNCApipaEndpoint(w http.ResponseWriter, r *http.Request)
func (*HTTPRestService) CreateOrUpdateNetworkContainerInternal ¶
func (service *HTTPRestService) CreateOrUpdateNetworkContainerInternal(req *cns.CreateNetworkContainerRequest) types.ResponseCode
This API will be called by CNS RequestController on CRD update.
func (*HTTPRestService) DeleteHostNCApipaEndpoint ¶ added in v1.5.26
func (service *HTTPRestService) DeleteHostNCApipaEndpoint(w http.ResponseWriter, r *http.Request)
func (*HTTPRestService) DeleteNetworkContainerInternal ¶
func (service *HTTPRestService) DeleteNetworkContainerInternal( req cns.DeleteNetworkContainerRequest, ) types.ResponseCode
DeleteNetworkContainerInternal deletes a network container.
func (*HTTPRestService) EndpointHandlerAPI ¶ added in v1.5.17
func (service *HTTPRestService) EndpointHandlerAPI(w http.ResponseWriter, r *http.Request)
EndpointHandlerAPI forwards the endpoint related APIs to GetEndpointHandler or UpdateEndpointHandler based on the http method
func (*HTTPRestService) GetAllNetworkContainers ¶ added in v1.5.26
func (service *HTTPRestService) GetAllNetworkContainers(w http.ResponseWriter, r *http.Request)
the function is to get all network containers based on given OrchestratorContext
func (*HTTPRestService) GetAssignedIPConfigs ¶
func (service *HTTPRestService) GetAssignedIPConfigs() []cns.IPConfigurationStatus
GetAssignedIPConfigs returns a filtered list of IPs which are in Assigned State.
func (*HTTPRestService) GetAvailableIPConfigs ¶
func (service *HTTPRestService) GetAvailableIPConfigs() []cns.IPConfigurationStatus
GetAvailableIPConfigs returns a filtered list of IPs which are in Available State.
func (*HTTPRestService) GetEndpointHandler ¶ added in v1.5.17
func (service *HTTPRestService) GetEndpointHandler(w http.ResponseWriter, r *http.Request)
GetEndpointHandler handles the incoming GetEndpoint requests with http Get method
func (*HTTPRestService) GetEndpointHelper ¶ added in v1.5.17
func (service *HTTPRestService) GetEndpointHelper(endpointID string) (*EndpointInfo, error)
GetEndpointHelper returns the state of the given endpointId
func (*HTTPRestService) GetExistingIPConfig ¶
func (service *HTTPRestService) GetExistingIPConfig(podInfo cns.PodInfo) ([]cns.PodIpInfo, bool, error)
Returns the current IP configs for a pod if they exist
func (*HTTPRestService) GetNetworkContainerByOrchestratorContext ¶ added in v1.5.26
func (service *HTTPRestService) GetNetworkContainerByOrchestratorContext(w http.ResponseWriter, r *http.Request)
func (*HTTPRestService) GetNetworkContainerInternal ¶
func (service *HTTPRestService) GetNetworkContainerInternal( req cns.GetNetworkContainerRequest, ) (cns.GetNetworkContainerResponse, types.ResponseCode)
GetNetworkContainerInternal gets network container details.
func (*HTTPRestService) GetPartitionKey ¶
func (service *HTTPRestService) GetPartitionKey() (dncPartitionKey string)
GetPartitionKey - Get dnc/service partition key
func (*HTTPRestService) GetPendingProgramIPConfigs ¶
func (service *HTTPRestService) GetPendingProgramIPConfigs() []cns.IPConfigurationStatus
GetPendingProgramIPConfigs returns a filtered list of IPs which are in PendingProgramming State.
func (*HTTPRestService) GetPendingReleaseIPConfigs ¶
func (service *HTTPRestService) GetPendingReleaseIPConfigs() []cns.IPConfigurationStatus
GetPendingReleaseIPConfigs returns a filtered list of IPs which are in PendingRelease State.
func (*HTTPRestService) GetPodIPConfigState ¶
func (service *HTTPRestService) GetPodIPConfigState() map[string]cns.IPConfigurationStatus
func (*HTTPRestService) HandleDebugIPAddresses ¶ added in v1.5.26
func (service *HTTPRestService) HandleDebugIPAddresses(w http.ResponseWriter, r *http.Request)
func (*HTTPRestService) HandleDebugPodContext ¶ added in v1.5.26
func (service *HTTPRestService) HandleDebugPodContext(w http.ResponseWriter, r *http.Request)
func (*HTTPRestService) HandleDebugRestData ¶ added in v1.5.26
func (service *HTTPRestService) HandleDebugRestData(w http.ResponseWriter, r *http.Request)
func (*HTTPRestService) Init ¶
func (service *HTTPRestService) Init(config *common.ServiceConfig) error
Init starts the CNS listener.
func (*HTTPRestService) MarkExistingIPsAsPendingRelease ¶
func (service *HTTPRestService) MarkExistingIPsAsPendingRelease(pendingIPIDs []string) error
MarkExistingIPsAsPendingRelease is called when CNS is starting up and there are existing ipconfigs in the CRD that are marked as pending.
func (*HTTPRestService) MarkIPAsPendingRelease ¶
func (service *HTTPRestService) MarkIPAsPendingRelease(totalIpsToRelease int) (map[string]cns.IPConfigurationStatus, error)
MarkIPAsPendingRelease will set the IPs which are in PendingProgramming or Available to PendingRelease state It will try to update [totalIpsToRelease] number of ips.
func (*HTTPRestService) MarkIpsAsAvailableUntransacted ¶
func (service *HTTPRestService) MarkIpsAsAvailableUntransacted(ncID string, newHostNCVersion int)
MarkIpsAsAvailableUntransacted will update pending programming IPs to available if NMAgent side's programmed nc version keep up with nc version. Note: this func is an untransacted API as the caller will take a Service lock
func (*HTTPRestService) MarkNIPsPendingRelease ¶ added in v1.5.21
func (service *HTTPRestService) MarkNIPsPendingRelease(n int) (map[string]cns.IPConfigurationStatus, error)
MarkIPAsPendingRelease will attempt to set [n] number of ips to PendingRelease state. It will start with any IPs in PendingProgramming state and then move on to any IPs in Allocated state until it has reached the target release quantity. If it is unable to set the expected number of IPs to PendingRelease, it will revert the changed IPs and return an error. MarkNIPsPendingRelease is no-op if [n] is not a positive integer.
func (*HTTPRestService) MustEnsureNoStaleNCs ¶
func (service *HTTPRestService) MustEnsureNoStaleNCs(validNCIDs []string)
func (*HTTPRestService) MustGenerateCNIConflistOnce ¶
func (service *HTTPRestService) MustGenerateCNIConflistOnce()
MustGenerateCNIConflistOnce will generate the CNI conflist once if the service was initialized with a conflist generator. If not, this is a no-op.
func (*HTTPRestService) ReconcileIPAMState ¶
func (service *HTTPRestService) ReconcileIPAMState(ncReqs []*cns.CreateNetworkContainerRequest, podInfoByIP map[string]cns.PodInfo, nnc *v1alpha.NodeNetworkConfig) types.ResponseCode
func (*HTTPRestService) RegisterPProfEndpoints ¶
func (service *HTTPRestService) RegisterPProfEndpoints()
func (*HTTPRestService) ReleaseIPConfigHandler ¶ added in v1.5.26
func (service *HTTPRestService) ReleaseIPConfigHandler(w http.ResponseWriter, r *http.Request)
ReleaseIPConfigHandler frees the IP assigned to a pod from CNS
func (*HTTPRestService) ReleaseIPConfigHandlerHelper ¶ added in v1.5.26
func (service *HTTPRestService) ReleaseIPConfigHandlerHelper(ctx context.Context, ipconfigsRequest cns.IPConfigsRequest) (*cns.IPConfigsResponse, error)
ReleaseIPConfigHandlerHelper validates the request and removes the endpoint associated with the pod
func (*HTTPRestService) ReleaseIPConfigsHandler ¶ added in v1.5.26
func (service *HTTPRestService) ReleaseIPConfigsHandler(w http.ResponseWriter, r *http.Request)
ReleaseIPConfigsHandler frees multiple IPConfigs from the CNS state
func (*HTTPRestService) RequestIPConfigHandler ¶ added in v1.5.26
func (service *HTTPRestService) RequestIPConfigHandler(w http.ResponseWriter, r *http.Request)
RequestIPConfigHandler requests an IPConfig from the CNS state
func (*HTTPRestService) RequestIPConfigsHandler ¶ added in v1.5.26
func (service *HTTPRestService) RequestIPConfigsHandler(w http.ResponseWriter, r *http.Request)
RequestIPConfigsHandler requests multiple IPConfigs from the CNS state
func (*HTTPRestService) SendNCSnapShotPeriodically ¶
func (service *HTTPRestService) SendNCSnapShotPeriodically(ctx context.Context, ncSnapshotIntervalInMinutes int)
Sets up periodic timer for sending network container snapshots
func (*HTTPRestService) SetNodeOrchestrator ¶
func (service *HTTPRestService) SetNodeOrchestrator(r *cns.SetOrchestratorTypeRequest)
SetNodeOrchestrator :- Set node orchestrator after registering with mDNC
func (*HTTPRestService) Start ¶
func (service *HTTPRestService) Start(config *common.ServiceConfig) error
Start starts the CNS listener.
func (*HTTPRestService) SyncHostNCVersion ¶
func (service *HTTPRestService) SyncHostNCVersion(ctx context.Context, channelMode string)
SyncHostNCVersion will check NC version from NMAgent and save it as host NC version in container status. If NMAgent NC version got updated, CNS will refresh the pending programming IP status.
func (*HTTPRestService) SyncNodeStatus ¶
func (service *HTTPRestService) SyncNodeStatus(dncEP, infraVnet, nodeID string, contextFromCNI json.RawMessage) (returnCode types.ResponseCode, errStr string)
func (*HTTPRestService) UpdateEndpointHandler ¶ added in v1.5.17
func (service *HTTPRestService) UpdateEndpointHandler(w http.ResponseWriter, r *http.Request)
UpdateEndpointHandler handles the incoming UpdateEndpoint requests with http Patch method
func (*HTTPRestService) UpdateEndpointHelper ¶ added in v1.5.17
func (service *HTTPRestService) UpdateEndpointHelper(endpointID string, req map[string]*IPInfo) error
UpdateEndpointHelper updates the state of the given endpointId with HNSId, VethName or other InterfaceInfo fields
type HTTPRestServiceData ¶
type HTTPRestServiceData struct { PodIPIDByPodInterfaceKey map[string][]string // PodInterfaceId is key and value is slice of Pod IP uuids. PodIPConfigState map[string]cns.IPConfigurationStatus // secondaryipid(uuid) is key }
HTTPRestServiceData represents in-memory CNS data in the debug API paths. TODO: add json tags for this struct as per linter suggestion, ignored for now as part of revert-PR
type HomeAzMonitor ¶
type HomeAzMonitor struct {
// contains filtered or unexported fields
}
func NewHomeAzMonitor ¶
func NewHomeAzMonitor(client nmagentClient, cacheRefreshIntervalSecs time.Duration) *HomeAzMonitor
NewHomeAzMonitor creates a new HomeAzMonitor object
func (*HomeAzMonitor) GetHomeAz ¶
func (h *HomeAzMonitor) GetHomeAz(_ context.Context) cns.GetHomeAzResponse
GetHomeAz returns home az cache value directly
func (*HomeAzMonitor) Populate ¶
func (h *HomeAzMonitor) Populate(ctx context.Context)
Populate makes call to nmagent to retrieve home az if getHomeAz api is supported by nmagent
func (*HomeAzMonitor) Start ¶
func (h *HomeAzMonitor) Start()
Start starts a new thread to refresh home az cache
type NoOpConflistGenerator ¶
type NoOpConflistGenerator struct{}
func (*NoOpConflistGenerator) Close ¶
func (*NoOpConflistGenerator) Close() error
func (*NoOpConflistGenerator) Generate ¶
func (*NoOpConflistGenerator) Generate() error
type Response ¶
type Response struct { ReturnCode types.ResponseCode Message string }