mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-13 10:33:35 +00:00
rebase: update k8s.io packages to v0.29.0
Signed-off-by: Niels de Vos <ndevos@ibm.com>
This commit is contained in:
committed by
mergify[bot]
parent
328a264202
commit
f080b9e0c9
12
vendor/k8s.io/client-go/transport/spdy/spdy.go
generated
vendored
12
vendor/k8s.io/client-go/transport/spdy/spdy.go
generated
vendored
@ -43,11 +43,15 @@ func RoundTripperFor(config *restclient.Config) (http.RoundTripper, Upgrader, er
|
||||
if config.Proxy != nil {
|
||||
proxy = config.Proxy
|
||||
}
|
||||
upgradeRoundTripper := spdy.NewRoundTripperWithConfig(spdy.RoundTripperConfig{
|
||||
TLS: tlsConfig,
|
||||
Proxier: proxy,
|
||||
PingPeriod: time.Second * 5,
|
||||
upgradeRoundTripper, err := spdy.NewRoundTripperWithConfig(spdy.RoundTripperConfig{
|
||||
TLS: tlsConfig,
|
||||
Proxier: proxy,
|
||||
PingPeriod: time.Second * 5,
|
||||
UpgradeTransport: nil,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
wrapper, err := restclient.HTTPWrappersForConfig(config, upgradeRoundTripper)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
|
55
vendor/k8s.io/client-go/transport/transport.go
generated
vendored
55
vendor/k8s.io/client-go/transport/transport.go
generated
vendored
@ -96,6 +96,32 @@ func TLSConfigFor(c *Config) (*tls.Config, error) {
|
||||
}
|
||||
|
||||
if c.HasCA() {
|
||||
/*
|
||||
kubernetes mutual (2-way) x509 between client and apiserver:
|
||||
|
||||
1. apiserver sending its apiserver certificate along with its publickey to client
|
||||
>2. client verifies the apiserver certificate sent against its cluster certificate authority data
|
||||
3. client sending its client certificate along with its public key to the apiserver
|
||||
4. apiserver verifies the client certificate sent against its cluster certificate authority data
|
||||
|
||||
description:
|
||||
here, with this block,
|
||||
cluster certificate authority data gets loaded into TLS before the handshake process
|
||||
for client to later during the handshake verify the apiserver certificate
|
||||
|
||||
normal args related to this stage:
|
||||
--certificate-authority='':
|
||||
Path to a cert file for the certificate authority
|
||||
|
||||
(retrievable from "kubectl options" command)
|
||||
(suggested by @deads2k)
|
||||
|
||||
see also:
|
||||
- for the step 1, see: staging/src/k8s.io/apiserver/pkg/server/options/serving.go
|
||||
- for the step 3, see: a few lines below in this file
|
||||
- for the step 4, see: staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go
|
||||
*/
|
||||
|
||||
rootCAs, err := rootCertPool(c.TLS.CAData)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to load root certificates: %w", err)
|
||||
@ -121,6 +147,35 @@ func TLSConfigFor(c *Config) (*tls.Config, error) {
|
||||
}
|
||||
|
||||
if c.HasCertAuth() || c.HasCertCallback() {
|
||||
|
||||
/*
|
||||
kubernetes mutual (2-way) x509 between client and apiserver:
|
||||
|
||||
1. apiserver sending its apiserver certificate along with its publickey to client
|
||||
2. client verifies the apiserver certificate sent against its cluster certificate authority data
|
||||
>3. client sending its client certificate along with its public key to the apiserver
|
||||
4. apiserver verifies the client certificate sent against its cluster certificate authority data
|
||||
|
||||
description:
|
||||
here, with this callback function,
|
||||
client certificate and pub key get loaded into TLS during the handshake process
|
||||
for apiserver to later in the step 4 verify the client certificate
|
||||
|
||||
normal args related to this stage:
|
||||
--client-certificate='':
|
||||
Path to a client certificate file for TLS
|
||||
--client-key='':
|
||||
Path to a client key file for TLS
|
||||
|
||||
(retrievable from "kubectl options" command)
|
||||
(suggested by @deads2k)
|
||||
|
||||
see also:
|
||||
- for the step 1, see: staging/src/k8s.io/apiserver/pkg/server/options/serving.go
|
||||
- for the step 2, see: a few lines above in this file
|
||||
- for the step 4, see: staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go
|
||||
*/
|
||||
|
||||
tlsConfig.GetClientCertificate = func(*tls.CertificateRequestInfo) (*tls.Certificate, error) {
|
||||
// Note: static key/cert data always take precedence over cert
|
||||
// callback.
|
||||
|
163
vendor/k8s.io/client-go/transport/websocket/roundtripper.go
generated
vendored
Normal file
163
vendor/k8s.io/client-go/transport/websocket/roundtripper.go
generated
vendored
Normal file
@ -0,0 +1,163 @@
|
||||
/*
|
||||
Copyright 2023 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 websocket
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/url"
|
||||
|
||||
gwebsocket "github.com/gorilla/websocket"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/httpstream"
|
||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||
restclient "k8s.io/client-go/rest"
|
||||
"k8s.io/client-go/transport"
|
||||
)
|
||||
|
||||
var (
|
||||
_ utilnet.TLSClientConfigHolder = &RoundTripper{}
|
||||
_ http.RoundTripper = &RoundTripper{}
|
||||
)
|
||||
|
||||
// ConnectionHolder defines functions for structure providing
|
||||
// access to the websocket connection.
|
||||
type ConnectionHolder interface {
|
||||
DataBufferSize() int
|
||||
Connection() *gwebsocket.Conn
|
||||
}
|
||||
|
||||
// RoundTripper knows how to establish a connection to a remote WebSocket endpoint and make it available for use.
|
||||
// RoundTripper must not be reused.
|
||||
type RoundTripper struct {
|
||||
// TLSConfig holds the TLS configuration settings to use when connecting
|
||||
// to the remote server.
|
||||
TLSConfig *tls.Config
|
||||
|
||||
// Proxier specifies a function to return a proxy for a given
|
||||
// Request. If the function returns a non-nil error, the
|
||||
// request is aborted with the provided error.
|
||||
// If Proxy is nil or returns a nil *URL, no proxy is used.
|
||||
Proxier func(req *http.Request) (*url.URL, error)
|
||||
|
||||
// Conn holds the WebSocket connection after a round trip.
|
||||
Conn *gwebsocket.Conn
|
||||
}
|
||||
|
||||
// Connection returns the stored websocket connection.
|
||||
func (rt *RoundTripper) Connection() *gwebsocket.Conn {
|
||||
return rt.Conn
|
||||
}
|
||||
|
||||
// DataBufferSize returns the size of buffers for the
|
||||
// websocket connection.
|
||||
func (rt *RoundTripper) DataBufferSize() int {
|
||||
return 32 * 1024
|
||||
}
|
||||
|
||||
// TLSClientConfig implements pkg/util/net.TLSClientConfigHolder.
|
||||
func (rt *RoundTripper) TLSClientConfig() *tls.Config {
|
||||
return rt.TLSConfig
|
||||
}
|
||||
|
||||
// RoundTrip connects to the remote websocket using the headers in the request and the TLS
|
||||
// configuration from the config
|
||||
func (rt *RoundTripper) RoundTrip(request *http.Request) (retResp *http.Response, retErr error) {
|
||||
defer func() {
|
||||
if request.Body != nil {
|
||||
err := request.Body.Close()
|
||||
if retErr == nil {
|
||||
retErr = err
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// set the protocol version directly on the dialer from the header
|
||||
protocolVersions := request.Header[httpstream.HeaderProtocolVersion]
|
||||
delete(request.Header, httpstream.HeaderProtocolVersion)
|
||||
|
||||
dialer := gwebsocket.Dialer{
|
||||
Proxy: rt.Proxier,
|
||||
TLSClientConfig: rt.TLSConfig,
|
||||
Subprotocols: protocolVersions,
|
||||
ReadBufferSize: rt.DataBufferSize() + 1024, // add space for the protocol byte indicating which channel the data is for
|
||||
WriteBufferSize: rt.DataBufferSize() + 1024, // add space for the protocol byte indicating which channel the data is for
|
||||
}
|
||||
switch request.URL.Scheme {
|
||||
case "https":
|
||||
request.URL.Scheme = "wss"
|
||||
case "http":
|
||||
request.URL.Scheme = "ws"
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown url scheme: %s", request.URL.Scheme)
|
||||
}
|
||||
wsConn, resp, err := dialer.DialContext(request.Context(), request.URL.String(), request.Header)
|
||||
if err != nil {
|
||||
return nil, &httpstream.UpgradeFailureError{Cause: err}
|
||||
}
|
||||
|
||||
rt.Conn = wsConn
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
// RoundTripperFor transforms the passed rest config into a wrapped roundtripper, as well
|
||||
// as a pointer to the websocket RoundTripper. The websocket RoundTripper contains the
|
||||
// websocket connection after RoundTrip() on the wrapper. Returns an error if there is
|
||||
// a problem creating the round trippers.
|
||||
func RoundTripperFor(config *restclient.Config) (http.RoundTripper, ConnectionHolder, error) {
|
||||
transportCfg, err := config.TransportConfig()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
tlsConfig, err := transport.TLSConfigFor(transportCfg)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
proxy := config.Proxy
|
||||
if proxy == nil {
|
||||
proxy = utilnet.NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment)
|
||||
}
|
||||
|
||||
upgradeRoundTripper := &RoundTripper{
|
||||
TLSConfig: tlsConfig,
|
||||
Proxier: proxy,
|
||||
}
|
||||
wrapper, err := transport.HTTPWrappersForConfig(transportCfg, upgradeRoundTripper)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
return wrapper, upgradeRoundTripper, nil
|
||||
}
|
||||
|
||||
// Negotiate opens a connection to a remote server and attempts to negotiate
|
||||
// a WebSocket connection. Upon success, it returns the negotiated connection.
|
||||
// The round tripper rt must use the WebSocket round tripper wsRt - see RoundTripperFor.
|
||||
func Negotiate(rt http.RoundTripper, connectionInfo ConnectionHolder, req *http.Request, protocols ...string) (*gwebsocket.Conn, error) {
|
||||
req.Header[httpstream.HeaderProtocolVersion] = protocols
|
||||
resp, err := rt.RoundTrip(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = resp.Body.Close()
|
||||
if err != nil {
|
||||
connectionInfo.Connection().Close()
|
||||
return nil, fmt.Errorf("error closing response body: %v", err)
|
||||
}
|
||||
return connectionInfo.Connection(), nil
|
||||
}
|
Reference in New Issue
Block a user