-
Notifications
You must be signed in to change notification settings - Fork 39k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #122050 from danwinship/proxy-change-tracker-clean…
…up-1 proxy service/endpoints change tracker cleanups
- Loading branch information
Showing
10 changed files
with
736 additions
and
727 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
/* | ||
Copyright 2017 The Kubernetes Authors. | ||
Licensed under the Apache License, Version 2.0 (the "License"); | ||
you may not use this file except in compliance with the License. | ||
You may obtain a copy of the License at | ||
http://www.apache.org/licenses/LICENSE-2.0 | ||
Unless required by applicable law or agreed to in writing, software | ||
distributed under the License is distributed on an "AS IS" BASIS, | ||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
See the License for the specific language governing permissions and | ||
limitations under the License. | ||
*/ | ||
|
||
package proxy | ||
|
||
import ( | ||
"net" | ||
"strconv" | ||
|
||
"k8s.io/apimachinery/pkg/util/sets" | ||
) | ||
|
||
// Endpoint in an interface which abstracts information about an endpoint. | ||
type Endpoint interface { | ||
// String returns endpoint string. An example format can be: `IP:Port`. | ||
// We take the returned value as ServiceEndpoint.Endpoint. | ||
String() string | ||
// IP returns IP part of the endpoint. | ||
IP() string | ||
// Port returns the Port part of the endpoint. | ||
Port() int | ||
|
||
// IsLocal returns true if the endpoint is running on the same host as kube-proxy. | ||
IsLocal() bool | ||
// IsReady returns true if an endpoint is ready and not terminating, or | ||
// if PublishNotReadyAddresses is set on the service. | ||
IsReady() bool | ||
// IsServing returns true if an endpoint is ready. It does not account | ||
// for terminating state. | ||
IsServing() bool | ||
// IsTerminating returns true if an endpoint is terminating. For pods, | ||
// that is any pod with a deletion timestamp. | ||
IsTerminating() bool | ||
|
||
// ZoneHints returns the zone hint for the endpoint. This is based on | ||
// endpoint.hints.forZones[0].name in the EndpointSlice API. | ||
ZoneHints() sets.Set[string] | ||
} | ||
|
||
// BaseEndpointInfo contains base information that defines an endpoint. | ||
// This could be used directly by proxier while processing endpoints, | ||
// or can be used for constructing a more specific EndpointInfo struct | ||
// defined by the proxier if needed. | ||
type BaseEndpointInfo struct { | ||
// Cache this values to improve performance | ||
ip string | ||
port int | ||
// endpoint is the same as net.JoinHostPort(ip,port) | ||
endpoint string | ||
|
||
// isLocal indicates whether the endpoint is running on same host as kube-proxy. | ||
isLocal bool | ||
|
||
// ready indicates whether this endpoint is ready and NOT terminating, unless | ||
// PublishNotReadyAddresses is set on the service, in which case it will just | ||
// always be true. | ||
ready bool | ||
// serving indicates whether this endpoint is ready regardless of its terminating state. | ||
// For pods this is true if it has a ready status regardless of its deletion timestamp. | ||
serving bool | ||
// terminating indicates whether this endpoint is terminating. | ||
// For pods this is true if it has a non-nil deletion timestamp. | ||
terminating bool | ||
|
||
// zoneHints represent the zone hints for the endpoint. This is based on | ||
// endpoint.hints.forZones[*].name in the EndpointSlice API. | ||
zoneHints sets.Set[string] | ||
} | ||
|
||
var _ Endpoint = &BaseEndpointInfo{} | ||
|
||
// String is part of proxy.Endpoint interface. | ||
func (info *BaseEndpointInfo) String() string { | ||
return info.endpoint | ||
} | ||
|
||
// IP returns just the IP part of the endpoint, it's a part of proxy.Endpoint interface. | ||
func (info *BaseEndpointInfo) IP() string { | ||
return info.ip | ||
} | ||
|
||
// Port returns just the Port part of the endpoint. | ||
func (info *BaseEndpointInfo) Port() int { | ||
return info.port | ||
} | ||
|
||
// IsLocal is part of proxy.Endpoint interface. | ||
func (info *BaseEndpointInfo) IsLocal() bool { | ||
return info.isLocal | ||
} | ||
|
||
// IsReady returns true if an endpoint is ready and not terminating. | ||
func (info *BaseEndpointInfo) IsReady() bool { | ||
return info.ready | ||
} | ||
|
||
// IsServing returns true if an endpoint is ready, regardless of if the | ||
// endpoint is terminating. | ||
func (info *BaseEndpointInfo) IsServing() bool { | ||
return info.serving | ||
} | ||
|
||
// IsTerminating retruns true if an endpoint is terminating. For pods, | ||
// that is any pod with a deletion timestamp. | ||
func (info *BaseEndpointInfo) IsTerminating() bool { | ||
return info.terminating | ||
} | ||
|
||
// ZoneHints returns the zone hint for the endpoint. | ||
func (info *BaseEndpointInfo) ZoneHints() sets.Set[string] { | ||
return info.zoneHints | ||
} | ||
|
||
func newBaseEndpointInfo(ip string, port int, isLocal, ready, serving, terminating bool, zoneHints sets.Set[string]) *BaseEndpointInfo { | ||
return &BaseEndpointInfo{ | ||
ip: ip, | ||
port: port, | ||
endpoint: net.JoinHostPort(ip, strconv.Itoa(port)), | ||
isLocal: isLocal, | ||
ready: ready, | ||
serving: serving, | ||
terminating: terminating, | ||
zoneHints: zoneHints, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.