Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
b0260b33
Unverified
Commit
b0260b33
authored
Jun 17, 2020
by
Hussein Galal
Committed by
GitHub
Jun 17, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update to v1.17.7-k3s1 (#1922)
parent
bd7fb4b0
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
434 additions
and
207 deletions
+434
-207
go.mod
go.mod
+25
-25
go.sum
go.sum
+0
-0
validation.go
...io/apimachinery/pkg/apis/meta/v1/validation/validation.go
+1
-1
create.go
vendor/k8s.io/apiserver/pkg/endpoints/handlers/create.go
+1
-5
fieldmanager.go
...erver/pkg/endpoints/handlers/fieldmanager/fieldmanager.go
+54
-8
BUILD
...server/pkg/endpoints/handlers/fieldmanager/internal/BUILD
+2
-0
atmostevery.go
...g/endpoints/handlers/fieldmanager/internal/atmostevery.go
+60
-0
managedfields.go
...endpoints/handlers/fieldmanager/internal/managedfields.go
+17
-11
structuredmerge.go
...er/pkg/endpoints/handlers/fieldmanager/structuredmerge.go
+2
-7
patch.go
vendor/k8s.io/apiserver/pkg/endpoints/handlers/patch.go
+2
-6
update.go
vendor/k8s.io/apiserver/pkg/endpoints/handlers/update.go
+1
-5
BUILD
vendor/k8s.io/apiserver/pkg/endpoints/metrics/BUILD
+6
-6
metrics.go
vendor/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go
+57
-4
base.go
vendor/k8s.io/client-go/pkg/version/base.go
+3
-3
base.go
vendor/k8s.io/component-base/version/base.go
+3
-3
certificates.go
vendor/k8s.io/kubectl/pkg/cmd/certificates/certificates.go
+5
-2
BUILD
vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/BUILD
+0
-5
server.go
vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go
+2
-33
auth.go
vendor/k8s.io/kubernetes/cmd/kubelet/app/auth.go
+21
-12
server.go
vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go
+2
-1
openapi.go
vendor/k8s.io/kubernetes/pkg/generated/openapi/openapi.go
+0
-0
BUILD
vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/BUILD
+5
-0
authentication.go
...io/kubernetes/pkg/kubeapiserver/options/authentication.go
+40
-17
server.go
...k8s.io/kubernetes/pkg/kubelet/apis/podresources/server.go
+2
-0
container_manager.go
vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager.go
+3
-0
container_manager_linux.go
...s.io/kubernetes/pkg/kubelet/cm/container_manager_linux.go
+4
-0
container_manager_stub.go
...8s.io/kubernetes/pkg/kubelet/cm/container_manager_stub.go
+4
-0
container_manager_windows.go
...io/kubernetes/pkg/kubelet/cm/container_manager_windows.go
+4
-0
manager.go
...k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go
+5
-5
manager_stub.go
...o/kubernetes/pkg/kubelet/cm/devicemanager/manager_stub.go
+5
-0
topology_hints.go
...kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go
+1
-1
types.go
...r/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/types.go
+3
-0
kubelet_network_linux.go
...or/k8s.io/kubernetes/pkg/kubelet/kubelet_network_linux.go
+16
-0
BUILD
vendor/k8s.io/kubernetes/pkg/registry/rbac/BUILD
+2
-0
helpers.go
vendor/k8s.io/kubernetes/pkg/registry/rbac/helpers.go
+1
-0
eventhandlers.go
vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go
+6
-2
aws.go
vendor/k8s.io/legacy-cloud-providers/aws/aws.go
+8
-1
azure_instances.go
...or/k8s.io/legacy-cloud-providers/azure/azure_instances.go
+3
-3
azure_loadbalancer.go
...k8s.io/legacy-cloud-providers/azure/azure_loadbalancer.go
+4
-10
azure_managedDiskController.go
...gacy-cloud-providers/azure/azure_managedDiskController.go
+9
-4
azure_standard.go
vendor/k8s.io/legacy-cloud-providers/azure/azure_standard.go
+24
-6
modules.txt
vendor/modules.txt
+21
-21
No files found.
go.mod
View file @
b0260b33
...
...
@@ -32,31 +32,31 @@ replace (
github.com/prometheus/client_model => github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910
github.com/prometheus/common => github.com/prometheus/common v0.0.0-20181126121408-4724e9255275
github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a
k8s.io/api => github.com/rancher/kubernetes/staging/src/k8s.io/api v1.17.
6
-k3s1
k8s.io/apiextensions-apiserver => github.com/rancher/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.
6
-k3s1
k8s.io/apimachinery => github.com/rancher/kubernetes/staging/src/k8s.io/apimachinery v1.17.
6
-k3s1
k8s.io/apiserver => github.com/rancher/kubernetes/staging/src/k8s.io/apiserver v1.17.
6
-k3s1
k8s.io/cli-runtime => github.com/rancher/kubernetes/staging/src/k8s.io/cli-runtime v1.17.
6
-k3s1
k8s.io/client-go => github.com/rancher/kubernetes/staging/src/k8s.io/client-go v1.17.
6
-k3s1
k8s.io/cloud-provider => github.com/rancher/kubernetes/staging/src/k8s.io/cloud-provider v1.17.
6
-k3s1
k8s.io/cluster-bootstrap => github.com/rancher/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.
6
-k3s1
k8s.io/code-generator => github.com/rancher/kubernetes/staging/src/k8s.io/code-generator v1.17.
6
-k3s1
k8s.io/component-base => github.com/rancher/kubernetes/staging/src/k8s.io/component-base v1.17.
6
-k3s1
k8s.io/cri-api => github.com/rancher/kubernetes/staging/src/k8s.io/cri-api v1.17.
6
-k3s1
k8s.io/csi-translation-lib => github.com/rancher/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.
6
-k3s1
k8s.io/kube-aggregator => github.com/rancher/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.
6
-k3s1
k8s.io/kube-controller-manager => github.com/rancher/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.
6
-k3s1
k8s.io/kube-proxy => github.com/rancher/kubernetes/staging/src/k8s.io/kube-proxy v1.17.
6
-k3s1
k8s.io/kube-scheduler => github.com/rancher/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.
6
-k3s1
k8s.io/kubectl => github.com/rancher/kubernetes/staging/src/k8s.io/kubectl v1.17.
6
-k3s1
k8s.io/kubelet => github.com/rancher/kubernetes/staging/src/k8s.io/kubelet v1.17.
6
-k3s1
k8s.io/kubernetes => github.com/rancher/kubernetes v1.17.
6
-k3s1
k8s.io/legacy-cloud-providers => github.com/rancher/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.
6
-k3s1
k8s.io/metrics => github.com/rancher/kubernetes/staging/src/k8s.io/metrics v1.17.
6
-k3s1
k8s.io/node-api => github.com/rancher/kubernetes/staging/src/k8s.io/node-api v1.17.
6
-k3s1
k8s.io/sample-apiserver => github.com/rancher/kubernetes/staging/src/k8s.io/sample-apiserver v1.17.
6
-k3s1
k8s.io/sample-cli-plugin => github.com/rancher/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.17.
6
-k3s1
k8s.io/sample-controller => github.com/rancher/kubernetes/staging/src/k8s.io/sample-controller v1.17.
6
-k3s1
k8s.io/api => github.com/rancher/kubernetes/staging/src/k8s.io/api v1.17.
7
-k3s1
k8s.io/apiextensions-apiserver => github.com/rancher/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.
7
-k3s1
k8s.io/apimachinery => github.com/rancher/kubernetes/staging/src/k8s.io/apimachinery v1.17.
7
-k3s1
k8s.io/apiserver => github.com/rancher/kubernetes/staging/src/k8s.io/apiserver v1.17.
7
-k3s1
k8s.io/cli-runtime => github.com/rancher/kubernetes/staging/src/k8s.io/cli-runtime v1.17.
7
-k3s1
k8s.io/client-go => github.com/rancher/kubernetes/staging/src/k8s.io/client-go v1.17.
7
-k3s1
k8s.io/cloud-provider => github.com/rancher/kubernetes/staging/src/k8s.io/cloud-provider v1.17.
7
-k3s1
k8s.io/cluster-bootstrap => github.com/rancher/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.
7
-k3s1
k8s.io/code-generator => github.com/rancher/kubernetes/staging/src/k8s.io/code-generator v1.17.
7
-k3s1
k8s.io/component-base => github.com/rancher/kubernetes/staging/src/k8s.io/component-base v1.17.
7
-k3s1
k8s.io/cri-api => github.com/rancher/kubernetes/staging/src/k8s.io/cri-api v1.17.
7
-k3s1
k8s.io/csi-translation-lib => github.com/rancher/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.
7
-k3s1
k8s.io/kube-aggregator => github.com/rancher/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.
7
-k3s1
k8s.io/kube-controller-manager => github.com/rancher/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.
7
-k3s1
k8s.io/kube-proxy => github.com/rancher/kubernetes/staging/src/k8s.io/kube-proxy v1.17.
7
-k3s1
k8s.io/kube-scheduler => github.com/rancher/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.
7
-k3s1
k8s.io/kubectl => github.com/rancher/kubernetes/staging/src/k8s.io/kubectl v1.17.
7
-k3s1
k8s.io/kubelet => github.com/rancher/kubernetes/staging/src/k8s.io/kubelet v1.17.
7
-k3s1
k8s.io/kubernetes => github.com/rancher/kubernetes v1.17.
7
-k3s1
k8s.io/legacy-cloud-providers => github.com/rancher/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.
7
-k3s1
k8s.io/metrics => github.com/rancher/kubernetes/staging/src/k8s.io/metrics v1.17.
7
-k3s1
k8s.io/node-api => github.com/rancher/kubernetes/staging/src/k8s.io/node-api v1.17.
7
-k3s1
k8s.io/sample-apiserver => github.com/rancher/kubernetes/staging/src/k8s.io/sample-apiserver v1.17.
7
-k3s1
k8s.io/sample-cli-plugin => github.com/rancher/kubernetes/staging/src/k8s.io/sample-cli-plugin v1.17.
7
-k3s1
k8s.io/sample-controller => github.com/rancher/kubernetes/staging/src/k8s.io/sample-controller v1.17.
7
-k3s1
mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34
)
...
...
go.sum
View file @
b0260b33
This diff is collapsed.
Click to expand it.
vendor/k8s.io/apimachinery/pkg/apis/meta/v1/validation/validation.go
View file @
b0260b33
...
...
@@ -178,7 +178,7 @@ func ValidateManagedFields(fieldsList []metav1.ManagedFieldsEntry, fldPath *fiel
default
:
allErrs
=
append
(
allErrs
,
field
.
Invalid
(
fldPath
.
Child
(
"operation"
),
fields
.
Operation
,
"must be `Apply` or `Update`"
))
}
if
fields
.
FieldsType
!=
"FieldsV1"
{
if
len
(
fields
.
FieldsType
)
>
0
&&
fields
.
FieldsType
!=
"FieldsV1"
{
allErrs
=
append
(
allErrs
,
field
.
Invalid
(
fldPath
.
Child
(
"fieldsType"
),
fields
.
FieldsType
,
"must be `FieldsV1`"
))
}
}
...
...
vendor/k8s.io/apiserver/pkg/endpoints/handlers/create.go
View file @
b0260b33
...
...
@@ -153,11 +153,7 @@ func createHandler(r rest.NamedCreater, scope *RequestScope, admit admission.Int
return
}
obj
,
err
=
scope
.
FieldManager
.
Update
(
liveObj
,
obj
,
managerOrUserAgent
(
options
.
FieldManager
,
req
.
UserAgent
()))
if
err
!=
nil
{
scope
.
err
(
fmt
.
Errorf
(
"failed to update object (Create for %v) managed fields: %v"
,
scope
.
Kind
,
err
),
w
,
req
)
return
}
obj
=
scope
.
FieldManager
.
UpdateNoErrors
(
liveObj
,
obj
,
managerOrUserAgent
(
options
.
FieldManager
,
req
.
UserAgent
()))
}
trace
.
Step
(
"About to store object in database"
)
...
...
vendor/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/fieldmanager.go
View file @
b0260b33
...
...
@@ -18,12 +18,15 @@ package fieldmanager
import
(
"fmt"
"reflect"
"time"
"k8s.io/apimachinery/pkg/api/meta"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
"k8s.io/klog"
openapiproto
"k8s.io/kube-openapi/pkg/util/proto"
"sigs.k8s.io/structured-merge-diff/v2/fieldpath"
)
...
...
@@ -33,6 +36,8 @@ import (
// TODO(jennybuckley): Determine if this is really the best value. Ideally we wouldn't unnecessarily merge too many entries.
const
DefaultMaxUpdateManagers
int
=
10
var
atMostEverySecond
=
internal
.
NewAtMostEvery
(
time
.
Second
)
// Managed groups a fieldpath.ManagedFields together with the timestamps associated with each operation.
type
Managed
interface
{
// Fields gets the fieldpath.ManagedFields.
...
...
@@ -102,20 +107,26 @@ func newDefaultFieldManager(f Manager, objectCreater runtime.ObjectCreater, kind
func
(
f
*
FieldManager
)
Update
(
liveObj
,
newObj
runtime
.
Object
,
manager
string
)
(
object
runtime
.
Object
,
err
error
)
{
// If the object doesn't have metadata, we should just return without trying to
// set the managedFields at all, so creates/updates/patches will work normally.
if
_
,
err
=
meta
.
Accessor
(
newObj
);
err
!=
nil
{
newAccessor
,
err
:=
meta
.
Accessor
(
newObj
)
if
err
!=
nil
{
return
newObj
,
nil
}
// First try to decode the managed fields provided in the update,
// This is necessary to allow directly updating managed fields.
var
managed
Managed
if
managed
,
err
=
internal
.
DecodeObjectManagedFields
(
newObj
);
err
!=
nil
||
len
(
managed
.
Fields
())
==
0
{
if
isResetManagedFields
(
newAccessor
.
GetManagedFields
())
{
managed
=
internal
.
NewEmptyManaged
()
}
else
if
managed
,
err
=
internal
.
DecodeObjectManagedFields
(
newAccessor
.
GetManagedFields
());
err
!=
nil
||
len
(
managed
.
Fields
())
==
0
{
liveAccessor
,
err
:=
meta
.
Accessor
(
liveObj
)
if
err
!=
nil
{
return
newObj
,
nil
}
// If the managed field is empty or we failed to decode it,
// let's try the live object. This is to prevent clients who
// don't understand managedFields from deleting it accidentally.
managed
,
err
=
internal
.
DecodeObjectManagedFields
(
liveObj
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to decode managed fields: %v"
,
err
)
if
managed
,
err
=
internal
.
DecodeObjectManagedFields
(
liveAccessor
.
GetManagedFields
());
err
!=
nil
{
managed
=
internal
.
NewEmptyManaged
()
}
}
...
...
@@ -133,17 +144,52 @@ func (f *FieldManager) Update(liveObj, newObj runtime.Object, manager string) (o
return
object
,
nil
}
// UpdateNoErrors is the same as Update, but it will not return
// errors. If an error happens, the object is returned with
// managedFields cleared.
func
(
f
*
FieldManager
)
UpdateNoErrors
(
liveObj
,
newObj
runtime
.
Object
,
manager
string
)
runtime
.
Object
{
obj
,
err
:=
f
.
Update
(
liveObj
,
newObj
,
manager
)
if
err
!=
nil
{
atMostEverySecond
.
Do
(
func
()
{
klog
.
Errorf
(
"[SHOULD NOT HAPPEN] failed to update managedFields for %v: %v"
,
newObj
.
GetObjectKind
()
.
GroupVersionKind
(),
err
)
})
// Explicitly remove managedFields on failure, so that
// we can't have garbage in it.
internal
.
RemoveObjectManagedFields
(
newObj
)
return
newObj
}
return
obj
}
// Returns true if the managedFields indicate that the user is trying to
// reset the managedFields, i.e. if the list is non-nil but empty, or if
// the list has one empty item.
func
isResetManagedFields
(
managedFields
[]
metav1
.
ManagedFieldsEntry
)
bool
{
if
len
(
managedFields
)
==
0
{
return
managedFields
!=
nil
}
if
len
(
managedFields
)
==
1
{
return
reflect
.
DeepEqual
(
managedFields
[
0
],
metav1
.
ManagedFieldsEntry
{})
}
return
false
}
// Apply is used when server-side apply is called, as it merges the
// object and updates the managed fields.
func
(
f
*
FieldManager
)
Apply
(
liveObj
runtime
.
Object
,
patch
[]
byte
,
manager
string
,
force
bool
)
(
object
runtime
.
Object
,
err
error
)
{
// If the object doesn't have metadata, apply isn't allowed.
if
_
,
err
=
meta
.
Accessor
(
liveObj
);
err
!=
nil
{
accessor
,
err
:=
meta
.
Accessor
(
liveObj
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"couldn't get accessor: %v"
,
err
)
}
// Decode the managed fields in the live object, since it isn't allowed in the patch.
var
managed
Managed
if
managed
,
err
=
internal
.
DecodeObjectManagedFields
(
liveObj
);
err
!=
nil
{
managed
,
err
:=
internal
.
DecodeObjectManagedFields
(
accessor
.
GetManagedFields
())
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to decode managed fields: %v"
,
err
)
}
...
...
vendor/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD
View file @
b0260b33
...
...
@@ -3,6 +3,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test")
go_library(
name = "go_default_library",
srcs = [
"atmostevery.go",
"conflict.go",
"fields.go",
"gvkparser.go",
...
...
@@ -33,6 +34,7 @@ go_library(
go_test(
name = "go_default_test",
srcs = [
"atmostevery_test.go",
"conflict_test.go",
"fields_test.go",
"managedfields_test.go",
...
...
vendor/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/atmostevery.go
0 → 100644
View file @
b0260b33
/*
Copyright 2020 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
internal
import
(
"sync"
"time"
)
// AtMostEvery will never run the method more than once every specified
// duration.
type
AtMostEvery
struct
{
delay
time
.
Duration
lastCall
time
.
Time
mutex
sync
.
Mutex
}
// NewAtMostEvery creates a new AtMostEvery, that will run the method at
// most every given duration.
func
NewAtMostEvery
(
delay
time
.
Duration
)
*
AtMostEvery
{
return
&
AtMostEvery
{
delay
:
delay
,
}
}
// updateLastCall returns true if the lastCall time has been updated,
// false if it was too early.
func
(
s
*
AtMostEvery
)
updateLastCall
()
bool
{
s
.
mutex
.
Lock
()
defer
s
.
mutex
.
Unlock
()
if
time
.
Since
(
s
.
lastCall
)
<
s
.
delay
{
return
false
}
s
.
lastCall
=
time
.
Now
()
return
true
}
// Do will run the method if enough time has passed, and return true.
// Otherwise, it does nothing and returns false.
func
(
s
*
AtMostEvery
)
Do
(
fn
func
())
bool
{
if
!
s
.
updateLastCall
()
{
return
false
}
fn
()
return
true
}
vendor/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/managedfields.go
View file @
b0260b33
...
...
@@ -54,6 +54,11 @@ func (m *managedStruct) Times() map[string]*metav1.Time {
return
m
.
times
}
// NewEmptyManaged creates an empty ManagedInterface.
func
NewEmptyManaged
()
ManagedInterface
{
return
NewManaged
(
fieldpath
.
ManagedFields
{},
map
[
string
]
*
metav1
.
Time
{})
}
// NewManaged creates a ManagedInterface from a fieldpath.ManagedFields and the timestamps associated with each operation.
func
NewManaged
(
f
fieldpath
.
ManagedFields
,
t
map
[
string
]
*
metav1
.
Time
)
ManagedInterface
{
return
&
managedStruct
{
...
...
@@ -74,16 +79,8 @@ func RemoveObjectManagedFields(obj runtime.Object) {
}
// DecodeObjectManagedFields extracts and converts the objects ManagedFields into a fieldpath.ManagedFields.
func
DecodeObjectManagedFields
(
from
runtime
.
Object
)
(
ManagedInterface
,
error
)
{
if
from
==
nil
{
return
&
managedStruct
{},
nil
}
accessor
,
err
:=
meta
.
Accessor
(
from
)
if
err
!=
nil
{
panic
(
fmt
.
Sprintf
(
"couldn't get accessor: %v"
,
err
))
}
managed
,
err
:=
decodeManagedFields
(
accessor
.
GetManagedFields
())
func
DecodeObjectManagedFields
(
from
[]
metav1
.
ManagedFieldsEntry
)
(
ManagedInterface
,
error
)
{
managed
,
err
:=
decodeManagedFields
(
from
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to convert managed fields from API: %v"
,
err
)
}
...
...
@@ -111,7 +108,16 @@ func EncodeObjectManagedFields(obj runtime.Object, managed ManagedInterface) err
func
decodeManagedFields
(
encodedManagedFields
[]
metav1
.
ManagedFieldsEntry
)
(
managed
managedStruct
,
err
error
)
{
managed
.
fields
=
make
(
fieldpath
.
ManagedFields
,
len
(
encodedManagedFields
))
managed
.
times
=
make
(
map
[
string
]
*
metav1
.
Time
,
len
(
encodedManagedFields
))
for
_
,
encodedVersionedSet
:=
range
encodedManagedFields
{
for
i
,
encodedVersionedSet
:=
range
encodedManagedFields
{
switch
encodedVersionedSet
.
FieldsType
{
case
"FieldsV1"
:
// Valid case.
case
""
:
return
managedStruct
{},
fmt
.
Errorf
(
"missing fieldsType in managed fields entry %d"
,
i
)
default
:
return
managedStruct
{},
fmt
.
Errorf
(
"invalid fieldsType %q in managed fields entry %d"
,
encodedVersionedSet
.
FieldsType
,
i
)
}
manager
,
err
:=
BuildManagerIdentifier
(
&
encodedVersionedSet
)
if
err
!=
nil
{
return
managedStruct
{},
fmt
.
Errorf
(
"error decoding manager from %v: %v"
,
encodedVersionedSet
,
err
)
...
...
vendor/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/structuredmerge.go
View file @
b0260b33
...
...
@@ -26,7 +26,6 @@ import (
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal"
"k8s.io/klog"
openapiproto
"k8s.io/kube-openapi/pkg/util/proto"
"sigs.k8s.io/structured-merge-diff/v2/fieldpath"
"sigs.k8s.io/structured-merge-diff/v2/merge"
...
...
@@ -99,15 +98,11 @@ func (f *structuredMergeManager) Update(liveObj, newObj runtime.Object, managed
}
newObjTyped
,
err
:=
f
.
typeConverter
.
ObjectToTyped
(
newObjVersioned
)
if
err
!=
nil
{
// Return newObj and just by-pass fields update. This really shouldn't happen.
klog
.
Errorf
(
"[SHOULD NOT HAPPEN] failed to create typed new object: %v"
,
err
)
return
newObj
,
managed
,
nil
return
nil
,
nil
,
fmt
.
Errorf
(
"failed to convert new object (%v) to smd typed: %v"
,
newObjVersioned
.
GetObjectKind
()
.
GroupVersionKind
(),
err
)
}
liveObjTyped
,
err
:=
f
.
typeConverter
.
ObjectToTyped
(
liveObjVersioned
)
if
err
!=
nil
{
// Return newObj and just by-pass fields update. This really shouldn't happen.
klog
.
Errorf
(
"[SHOULD NOT HAPPEN] failed to create typed live object: %v"
,
err
)
return
newObj
,
managed
,
nil
return
nil
,
nil
,
fmt
.
Errorf
(
"failed to convert live object (%v) to smd typed: %v"
,
liveObjVersioned
.
GetObjectKind
()
.
GroupVersionKind
(),
err
)
}
apiVersion
:=
fieldpath
.
APIVersion
(
f
.
groupVersion
.
String
())
...
...
vendor/k8s.io/apiserver/pkg/endpoints/handlers/patch.go
View file @
b0260b33
...
...
@@ -321,9 +321,7 @@ func (p *jsonPatcher) applyPatchToCurrentObject(currentObject runtime.Object) (r
}
if
p
.
fieldManager
!=
nil
{
if
objToUpdate
,
err
=
p
.
fieldManager
.
Update
(
currentObject
,
objToUpdate
,
managerOrUserAgent
(
p
.
options
.
FieldManager
,
p
.
userAgent
));
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to update object (json PATCH for %v) managed fields: %v"
,
p
.
kind
,
err
)
}
objToUpdate
=
p
.
fieldManager
.
UpdateNoErrors
(
currentObject
,
objToUpdate
,
managerOrUserAgent
(
p
.
options
.
FieldManager
,
p
.
userAgent
))
}
return
objToUpdate
,
nil
}
...
...
@@ -406,9 +404,7 @@ func (p *smpPatcher) applyPatchToCurrentObject(currentObject runtime.Object) (ru
}
if
p
.
fieldManager
!=
nil
{
if
newObj
,
err
=
p
.
fieldManager
.
Update
(
currentObject
,
newObj
,
managerOrUserAgent
(
p
.
options
.
FieldManager
,
p
.
userAgent
));
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to update object (smp PATCH for %v) managed fields: %v"
,
p
.
kind
,
err
)
}
newObj
=
p
.
fieldManager
.
UpdateNoErrors
(
currentObject
,
newObj
,
managerOrUserAgent
(
p
.
options
.
FieldManager
,
p
.
userAgent
))
}
return
newObj
,
nil
}
...
...
vendor/k8s.io/apiserver/pkg/endpoints/handlers/update.go
View file @
b0260b33
...
...
@@ -126,11 +126,7 @@ func UpdateResource(r rest.Updater, scope *RequestScope, admit admission.Interfa
transformers
:=
[]
rest
.
TransformFunc
{}
if
scope
.
FieldManager
!=
nil
{
transformers
=
append
(
transformers
,
func
(
_
context
.
Context
,
newObj
,
liveObj
runtime
.
Object
)
(
runtime
.
Object
,
error
)
{
obj
,
err
:=
scope
.
FieldManager
.
Update
(
liveObj
,
newObj
,
managerOrUserAgent
(
options
.
FieldManager
,
req
.
UserAgent
()))
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to update object (Update for %v) managed fields: %v"
,
scope
.
Kind
,
err
)
}
return
obj
,
nil
return
scope
.
FieldManager
.
UpdateNoErrors
(
liveObj
,
newObj
,
managerOrUserAgent
(
options
.
FieldManager
,
req
.
UserAgent
())),
nil
})
}
if
mutatingAdmission
,
ok
:=
admit
.
(
admission
.
MutationInterface
);
ok
{
...
...
vendor/k8s.io/apiserver/pkg/endpoints/metrics/BUILD
View file @
b0260b33
...
...
@@ -6,12 +6,6 @@ load(
"go_test",
)
go_test(
name = "go_default_test",
srcs = ["metrics_test.go"],
embed = [":go_default_library"],
)
go_library(
name = "go_default_library",
srcs = ["metrics.go"],
...
...
@@ -42,3 +36,9 @@ filegroup(
srcs = [":package-srcs"],
tags = ["automanaged"],
)
go_test(
name = "go_default_test",
srcs = ["metrics_test.go"],
embed = [":go_default_library"],
)
vendor/k8s.io/apiserver/pkg/endpoints/metrics/metrics.go
View file @
b0260b33
...
...
@@ -27,8 +27,7 @@ import (
"sync"
"time"
"github.com/emicklei/go-restful"
restful
"github.com/emicklei/go-restful"
"k8s.io/apimachinery/pkg/apis/meta/v1/validation"
"k8s.io/apimachinery/pkg/types"
utilsets
"k8s.io/apimachinery/pkg/util/sets"
...
...
@@ -48,6 +47,8 @@ type resettableCollector interface {
const
(
APIServerComponent
string
=
"apiserver"
OtherContentType
string
=
"other"
OtherRequestMethod
string
=
"other"
)
/*
...
...
@@ -217,6 +218,37 @@ var (
currentInflightRequests
,
requestTerminationsTotal
,
}
// these are the known (e.g. whitelisted/known) content types which we will report for
// request metrics. Any other RFC compliant content types will be aggregated under 'unknown'
knownMetricContentTypes
=
utilsets
.
NewString
(
"application/apply-patch+yaml"
,
"application/json"
,
"application/json-patch+json"
,
"application/merge-patch+json"
,
"application/strategic-merge-patch+json"
,
"application/vnd.kubernetes.protobuf"
,
"application/vnd.kubernetes.protobuf;stream=watch"
,
"application/yaml"
,
"text/plain"
,
"text/plain;charset=utf-8"
)
// these are the valid request methods which we report in our metrics. Any other request methods
// will be aggregated under 'unknown'
validRequestMethods
=
utilsets
.
NewString
(
"APPLY"
,
"CONNECT"
,
"CREATE"
,
"DELETE"
,
"DELETECOLLECTION"
,
"GET"
,
"LIST"
,
"PATCH"
,
"POST"
,
"PROXY"
,
"PUT"
,
"UPDATE"
,
"WATCH"
,
"WATCHLIST"
)
)
const
(
...
...
@@ -264,6 +296,10 @@ func RecordRequestTermination(req *http.Request, requestInfo *request.RequestInf
// translated to RequestInfo).
// However, we need to tweak it e.g. to differentiate GET from LIST.
verb
:=
canonicalVerb
(
strings
.
ToUpper
(
req
.
Method
),
scope
)
// set verbs to a bounded set of known and expected verbs
if
!
validRequestMethods
.
Has
(
verb
)
{
verb
=
OtherRequestMethod
}
if
requestInfo
.
IsResourceRequest
{
requestTerminationsTotal
.
WithLabelValues
(
cleanVerb
(
verb
,
req
),
requestInfo
.
APIGroup
,
requestInfo
.
APIVersion
,
requestInfo
.
Resource
,
requestInfo
.
Subresource
,
scope
,
component
,
codeToString
(
code
))
.
Inc
()
}
else
{
...
...
@@ -304,8 +340,9 @@ func MonitorRequest(req *http.Request, verb, group, version, resource, subresour
client
:=
""
elapsedMicroseconds
:=
float64
(
elapsed
/
time
.
Microsecond
)
elapsedSeconds
:=
elapsed
.
Seconds
()
requestCounter
.
WithLabelValues
(
reportedVerb
,
dryRun
,
group
,
version
,
resource
,
subresource
,
scope
,
component
,
client
,
contentType
,
codeToString
(
httpCode
))
.
Inc
()
deprecatedRequestCounter
.
WithLabelValues
(
reportedVerb
,
group
,
version
,
resource
,
subresource
,
scope
,
component
,
client
,
contentType
,
codeToString
(
httpCode
))
.
Inc
()
cleanedContentType
:=
cleanContentType
(
contentType
)
requestCounter
.
WithLabelValues
(
reportedVerb
,
dryRun
,
group
,
version
,
resource
,
subresource
,
scope
,
component
,
client
,
cleanedContentType
,
codeToString
(
httpCode
))
.
Inc
()
deprecatedRequestCounter
.
WithLabelValues
(
reportedVerb
,
group
,
version
,
resource
,
subresource
,
scope
,
component
,
client
,
cleanedContentType
,
codeToString
(
httpCode
))
.
Inc
()
requestLatencies
.
WithLabelValues
(
reportedVerb
,
dryRun
,
group
,
version
,
resource
,
subresource
,
scope
,
component
)
.
Observe
(
elapsedSeconds
)
deprecatedRequestLatencies
.
WithLabelValues
(
reportedVerb
,
group
,
version
,
resource
,
subresource
,
scope
,
component
)
.
Observe
(
elapsedMicroseconds
)
deprecatedRequestLatenciesSummary
.
WithLabelValues
(
reportedVerb
,
group
,
version
,
resource
,
subresource
,
scope
,
component
)
.
Observe
(
elapsedMicroseconds
)
...
...
@@ -362,6 +399,19 @@ func InstrumentHandlerFunc(verb, group, version, resource, subresource, scope, c
}
}
// cleanContentType binds the contentType (for metrics related purposes) to a
// bounded set of known/expected content-types.
func
cleanContentType
(
contentType
string
)
string
{
normalizedContentType
:=
strings
.
ToLower
(
contentType
)
if
strings
.
HasSuffix
(
contentType
,
" stream=watch"
)
||
strings
.
HasSuffix
(
contentType
,
" charset=utf-8"
)
{
normalizedContentType
=
strings
.
ReplaceAll
(
contentType
,
" "
,
""
)
}
if
knownMetricContentTypes
.
Has
(
normalizedContentType
)
{
return
normalizedContentType
}
return
OtherContentType
}
// CleanScope returns the scope of the request.
func
CleanScope
(
requestInfo
*
request
.
RequestInfo
)
string
{
if
requestInfo
.
Namespace
!=
""
{
...
...
@@ -406,7 +456,10 @@ func cleanVerb(verb string, request *http.Request) string {
if
verb
==
"PATCH"
&&
request
.
Header
.
Get
(
"Content-Type"
)
==
string
(
types
.
ApplyPatchType
)
&&
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
ServerSideApply
)
{
reportedVerb
=
"APPLY"
}
if
validRequestMethods
.
Has
(
reportedVerb
)
{
return
reportedVerb
}
return
OtherRequestMethod
}
func
cleanDryRun
(
u
*
url
.
URL
)
string
{
...
...
vendor/k8s.io/client-go/pkg/version/base.go
View file @
b0260b33
...
...
@@ -3,8 +3,8 @@ package version
var
(
gitMajor
=
"1"
gitMinor
=
"17"
gitVersion
=
"v1.17.
6
-k3s1"
gitCommit
=
"
1e1abaed8e851a7354fc128a32c7cb1f5433e3bb
"
gitVersion
=
"v1.17.
7
-k3s1"
gitCommit
=
"
ff510188b064537a75a2a5d91b8500bdfb5e0e0e
"
gitTreeState
=
"clean"
buildDate
=
"2020-0
5-26T21:16:4
8Z"
buildDate
=
"2020-0
6-17T17:31:2
8Z"
)
vendor/k8s.io/component-base/version/base.go
View file @
b0260b33
...
...
@@ -3,8 +3,8 @@ package version
var
(
gitMajor
=
"1"
gitMinor
=
"17"
gitVersion
=
"v1.17.
6
-k3s1"
gitCommit
=
"
1e1abaed8e851a7354fc128a32c7cb1f5433e3bb
"
gitVersion
=
"v1.17.
7
-k3s1"
gitCommit
=
"
ff510188b064537a75a2a5d91b8500bdfb5e0e0e
"
gitTreeState
=
"clean"
buildDate
=
"2020-0
5-26T21:16:4
8Z"
buildDate
=
"2020-0
6-17T17:31:2
8Z"
)
vendor/k8s.io/kubectl/pkg/cmd/certificates/certificates.go
View file @
b0260b33
...
...
@@ -221,7 +221,7 @@ func (o *CertificateOptions) modifyCertificateCondition(builder *resource.Builde
WithScheme
(
scheme
.
Scheme
,
scheme
.
Scheme
.
PrioritizedVersionsAllGroups
()
...
)
.
ContinueOnError
()
.
FilenameParam
(
false
,
&
o
.
FilenameOptions
)
.
ResourceNames
(
"certificatesigningrequest"
,
o
.
csrNames
...
)
.
ResourceNames
(
"certificatesigningrequest
s.v1beta1.certificates.k8s.io
"
,
o
.
csrNames
...
)
.
RequireObject
(
true
)
.
Flatten
()
.
Latest
()
.
...
...
@@ -231,7 +231,10 @@ func (o *CertificateOptions) modifyCertificateCondition(builder *resource.Builde
return
err
}
for
i
:=
0
;
;
i
++
{
csr
:=
info
.
Object
.
(
*
certificatesv1beta1
.
CertificateSigningRequest
)
csr
,
ok
:=
info
.
Object
.
(
*
certificatesv1beta1
.
CertificateSigningRequest
)
if
!
ok
{
return
fmt
.
Errorf
(
"can only handle certificates.k8s.io/v1beta1 certificate signing requests"
)
}
csr
,
hasCondition
:=
modify
(
csr
)
if
!
hasCondition
||
force
{
csr
,
err
=
clientSet
.
CertificateSigningRequests
()
.
UpdateApproval
(
csr
)
...
...
vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/BUILD
View file @
b0260b33
...
...
@@ -13,8 +13,6 @@ go_library(
"//cmd/kube-apiserver/app/options:go_default_library",
"//pkg/api/legacyscheme:go_default_library",
"//pkg/capabilities:go_default_library",
"//pkg/controller/serviceaccount:go_default_library",
"//pkg/features:go_default_library",
"//pkg/generated/openapi:go_default_library",
"//pkg/kubeapiserver:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
...
...
@@ -30,7 +28,6 @@ go_library(
"//pkg/registry/rbac/rest:go_default_library",
"//pkg/serviceaccount:go_default_library",
"//pkg/util/flag:go_default_library",
"//plugin/pkg/auth/authenticator/token/bootstrap:go_default_library",
"//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1:go_default_library",
"//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library",
"//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library",
...
...
@@ -44,7 +41,6 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/authentication/authenticator:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/endpoints/openapi:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/features:go_default_library",
...
...
@@ -76,7 +72,6 @@ go_library(
"//staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/typed/apiregistration/v1:go_default_library",
"//staging/src/k8s.io/kube-aggregator/pkg/client/informers/externalversions/apiregistration/v1:go_default_library",
"//staging/src/k8s.io/kube-aggregator/pkg/controllers/autoregister:go_default_library",
"//vendor/github.com/go-openapi/spec:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/k8s.io/klog:go_default_library",
],
...
...
vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go
View file @
b0260b33
...
...
@@ -30,13 +30,11 @@ import (
"strings"
"time"
"github.com/go-openapi/spec"
"k8s.io/kubernetes/pkg/kubelet/types"
"github.com/spf13/cobra"
extensionsapiserver
"k8s.io/apiextensions-apiserver/pkg/apiserver"
v1
"k8s.io/apimachinery/pkg/apis/meta/v1"
utilerrors
"k8s.io/apimachinery/pkg/util/errors"
utilnet
"k8s.io/apimachinery/pkg/util/net"
"k8s.io/apimachinery/pkg/util/sets"
...
...
@@ -51,7 +49,6 @@ import (
serverstorage
"k8s.io/apiserver/pkg/server/storage"
"k8s.io/apiserver/pkg/storage/etcd3/preflight"
"k8s.io/apiserver/pkg/util/feature"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
"k8s.io/apiserver/pkg/util/term"
"k8s.io/apiserver/pkg/util/webhook"
clientgoinformers
"k8s.io/client-go/informers"
...
...
@@ -70,8 +67,6 @@ import (
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/capabilities"
serviceaccountcontroller
"k8s.io/kubernetes/pkg/controller/serviceaccount"
"k8s.io/kubernetes/pkg/features"
generatedopenapi
"k8s.io/kubernetes/pkg/generated/openapi"
"k8s.io/kubernetes/pkg/kubeapiserver"
kubeapiserveradmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
...
...
@@ -86,7 +81,6 @@ import (
rbacrest
"k8s.io/kubernetes/pkg/registry/rbac/rest"
"k8s.io/kubernetes/pkg/serviceaccount"
utilflag
"k8s.io/kubernetes/pkg/util/flag"
"k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/bootstrap"
)
const
(
...
...
@@ -437,9 +431,6 @@ func buildGenericConfig(
if
lastErr
=
s
.
SecureServing
.
ApplyTo
(
&
genericConfig
.
SecureServing
,
&
genericConfig
.
LoopbackClientConfig
);
lastErr
!=
nil
{
return
}
if
lastErr
=
s
.
Authentication
.
ApplyTo
(
genericConfig
);
lastErr
!=
nil
{
return
}
if
lastErr
=
s
.
Features
.
ApplyTo
(
genericConfig
);
lastErr
!=
nil
{
return
}
...
...
@@ -495,9 +486,8 @@ func buildGenericConfig(
}
versionedInformers
=
clientgoinformers
.
NewSharedInformerFactory
(
clientgoExternalClient
,
10
*
time
.
Minute
)
genericConfig
.
Authentication
.
Authenticator
,
genericConfig
.
OpenAPIConfig
.
SecurityDefinitions
,
err
=
BuildAuthenticator
(
s
,
clientgoExternalClient
,
versionedInformers
)
if
err
!=
nil
{
lastErr
=
fmt
.
Errorf
(
"invalid authentication config: %v"
,
err
)
// Authentication.ApplyTo requires already applied OpenAPIConfig
if
lastErr
=
s
.
Authentication
.
ApplyTo
(
&
genericConfig
.
Authentication
,
genericConfig
.
SecureServing
,
genericConfig
.
OpenAPIConfig
,
clientgoExternalClient
,
versionedInformers
);
lastErr
!=
nil
{
return
}
...
...
@@ -552,27 +542,6 @@ func buildGenericConfig(
return
}
// BuildAuthenticator constructs the authenticator
func
BuildAuthenticator
(
s
*
options
.
ServerRunOptions
,
extclient
clientgoclientset
.
Interface
,
versionedInformer
clientgoinformers
.
SharedInformerFactory
)
(
authenticator
.
Request
,
*
spec
.
SecurityDefinitions
,
error
)
{
authenticatorConfig
,
err
:=
s
.
Authentication
.
ToAuthenticationConfig
()
if
err
!=
nil
{
return
nil
,
nil
,
err
}
if
s
.
Authentication
.
ServiceAccounts
.
Lookup
||
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
TokenRequest
)
{
authenticatorConfig
.
ServiceAccountTokenGetter
=
serviceaccountcontroller
.
NewGetterFromClient
(
extclient
,
versionedInformer
.
Core
()
.
V1
()
.
Secrets
()
.
Lister
(),
versionedInformer
.
Core
()
.
V1
()
.
ServiceAccounts
()
.
Lister
(),
versionedInformer
.
Core
()
.
V1
()
.
Pods
()
.
Lister
(),
)
}
authenticatorConfig
.
BootstrapTokenAuthenticator
=
bootstrap
.
NewTokenAuthenticator
(
versionedInformer
.
Core
()
.
V1
()
.
Secrets
()
.
Lister
()
.
Secrets
(
v1
.
NamespaceSystem
),
)
return
authenticatorConfig
.
New
()
}
// BuildAuthorizer constructs the authorizer
func
BuildAuthorizer
(
s
*
options
.
ServerRunOptions
,
versionedInformers
clientgoinformers
.
SharedInformerFactory
)
(
authorizer
.
Authorizer
,
authorizer
.
RuleResolver
,
error
)
{
authorizationConfig
:=
s
.
Authorization
.
ToAuthorizationConfig
(
versionedInformers
)
...
...
vendor/k8s.io/kubernetes/cmd/kubelet/app/auth.go
View file @
b0260b33
...
...
@@ -36,7 +36,8 @@ import (
)
// BuildAuth creates an authenticator, an authorizer, and a matching authorizer attributes getter compatible with the kubelet's needs
func
BuildAuth
(
nodeName
types
.
NodeName
,
client
clientset
.
Interface
,
config
kubeletconfig
.
KubeletConfiguration
)
(
server
.
AuthInterface
,
error
)
{
// It returns AuthInterface, a run method to start internal controllers (like cert reloading) and error.
func
BuildAuth
(
nodeName
types
.
NodeName
,
client
clientset
.
Interface
,
config
kubeletconfig
.
KubeletConfiguration
)
(
server
.
AuthInterface
,
func
(
<-
chan
struct
{}),
error
)
{
// Get clients, if provided
var
(
tokenClient
authenticationclient
.
TokenReviewInterface
...
...
@@ -47,47 +48,55 @@ func BuildAuth(nodeName types.NodeName, client clientset.Interface, config kubel
sarClient
=
client
.
AuthorizationV1
()
.
SubjectAccessReviews
()
}
authenticator
,
err
:=
BuildAuthn
(
tokenClient
,
config
.
Authentication
)
authenticator
,
runAuthenticatorCAReload
,
err
:=
BuildAuthn
(
tokenClient
,
config
.
Authentication
)
if
err
!=
nil
{
return
nil
,
err
return
nil
,
nil
,
err
}
attributes
:=
server
.
NewNodeAuthorizerAttributesGetter
(
nodeName
)
authorizer
,
err
:=
BuildAuthz
(
sarClient
,
config
.
Authorization
)
if
err
!=
nil
{
return
nil
,
err
return
nil
,
nil
,
err
}
return
server
.
NewKubeletAuth
(
authenticator
,
attributes
,
authorizer
),
nil
return
server
.
NewKubeletAuth
(
authenticator
,
attributes
,
authorizer
),
runAuthenticatorCAReload
,
nil
}
// BuildAuthn creates an authenticator compatible with the kubelet's needs
func
BuildAuthn
(
client
authenticationclient
.
TokenReviewInterface
,
authn
kubeletconfig
.
KubeletAuthentication
)
(
authenticator
.
Request
,
error
)
{
var
clientCertificateCAContentProvider
authenticatorfactory
.
CAContentProvider
func
BuildAuthn
(
client
authenticationclient
.
TokenReviewInterface
,
authn
kubeletconfig
.
KubeletAuthentication
)
(
authenticator
.
Request
,
func
(
<-
chan
struct
{}),
error
)
{
var
dynamicCAContentFromFile
*
dynamiccertificates
.
DynamicFileCAContent
var
err
error
if
len
(
authn
.
X509
.
ClientCAFile
)
>
0
{
clientCertificateCAContentProvider
,
err
=
dynamiccertificates
.
NewDynamicCAContentFromFile
(
"client-ca-bundle"
,
authn
.
X509
.
ClientCAFile
)
dynamicCAContentFromFile
,
err
=
dynamiccertificates
.
NewDynamicCAContentFromFile
(
"client-ca-bundle"
,
authn
.
X509
.
ClientCAFile
)
if
err
!=
nil
{
return
nil
,
err
return
nil
,
nil
,
err
}
}
authenticatorConfig
:=
authenticatorfactory
.
DelegatingAuthenticatorConfig
{
Anonymous
:
authn
.
Anonymous
.
Enabled
,
CacheTTL
:
authn
.
Webhook
.
CacheTTL
.
Duration
,
ClientCertificateCAContentProvider
:
clientCertificateCAContentProvider
,
ClientCertificateCAContentProvider
:
dynamicCAContentFromFile
,
}
if
authn
.
Webhook
.
Enabled
{
if
client
==
nil
{
return
nil
,
errors
.
New
(
"no client provided, cannot use webhook authentication"
)
return
nil
,
nil
,
errors
.
New
(
"no client provided, cannot use webhook authentication"
)
}
authenticatorConfig
.
TokenAccessReviewClient
=
client
}
authenticator
,
_
,
err
:=
authenticatorConfig
.
New
()
return
authenticator
,
err
if
err
!=
nil
{
return
nil
,
nil
,
err
}
return
authenticator
,
func
(
stopCh
<-
chan
struct
{})
{
if
dynamicCAContentFromFile
!=
nil
{
go
dynamicCAContentFromFile
.
Run
(
1
,
stopCh
)
}
},
err
}
// BuildAuthz creates an authorizer compatible with the kubelet's needs
...
...
vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go
View file @
b0260b33
...
...
@@ -591,11 +591,12 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, featureGate f
}
if
kubeDeps
.
Auth
==
nil
{
auth
,
err
:=
BuildAuth
(
nodeName
,
kubeDeps
.
KubeClient
,
s
.
KubeletConfiguration
)
auth
,
runAuthenticatorCAReload
,
err
:=
BuildAuth
(
nodeName
,
kubeDeps
.
KubeClient
,
s
.
KubeletConfiguration
)
if
err
!=
nil
{
return
err
}
kubeDeps
.
Auth
=
auth
runAuthenticatorCAReload
(
stopCh
)
}
var
cgroupRoots
[]
string
...
...
vendor/k8s.io/kubernetes/pkg/generated/openapi/openapi.go
View file @
b0260b33
This source diff could not be displayed because it is too large. You can
view the blob
instead.
vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/BUILD
View file @
b0260b33
...
...
@@ -19,6 +19,7 @@ go_library(
],
importpath = "k8s.io/kubernetes/pkg/kubeapiserver/options",
deps = [
"//pkg/controller/serviceaccount:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubeapiserver/authenticator:go_default_library",
"//pkg/kubeapiserver/authorizer:go_default_library",
...
...
@@ -51,6 +52,8 @@ go_library(
"//plugin/pkg/admission/storage/persistentvolume/resize:go_default_library",
"//plugin/pkg/admission/storage/storageclass/setdefault:go_default_library",
"//plugin/pkg/admission/storage/storageobjectinuseprotection:go_default_library",
"//plugin/pkg/auth/authenticator/token/bootstrap:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
...
...
@@ -62,11 +65,13 @@ go_library(
"//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/rest:go_default_library",
"//staging/src/k8s.io/component-base/cli/flag:go_default_library",
"//staging/src/k8s.io/component-base/featuregate:go_default_library",
"//vendor/github.com/spf13/pflag:go_default_library",
"//vendor/k8s.io/klog:go_default_library",
"//vendor/k8s.io/kube-openapi/pkg/common:go_default_library",
],
)
...
...
vendor/k8s.io/kubernetes/pkg/kubeapiserver/options/authentication.go
View file @
b0260b33
...
...
@@ -24,17 +24,23 @@ import (
"time"
"github.com/spf13/pflag"
"k8s.io/klog"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apiserver/pkg/authentication/authenticator"
genericapiserver
"k8s.io/apiserver/pkg/server"
genericoptions
"k8s.io/apiserver/pkg/server/options"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
cliflag
"k8s.io/component-base/cli/flag"
"k8s.io/klog"
openapicommon
"k8s.io/kube-openapi/pkg/common"
serviceaccountcontroller
"k8s.io/kubernetes/pkg/controller/serviceaccount"
"k8s.io/kubernetes/pkg/features"
kubeauthenticator
"k8s.io/kubernetes/pkg/kubeapiserver/authenticator"
authzmodes
"k8s.io/kubernetes/pkg/kubeapiserver/authorizer/modes"
"k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/bootstrap"
)
type
BuiltInAuthenticationOptions
struct
{
...
...
@@ -391,37 +397,54 @@ func (s *BuiltInAuthenticationOptions) ToAuthenticationConfig() (kubeauthenticat
return
ret
,
nil
}
func
(
o
*
BuiltInAuthenticationOptions
)
ApplyTo
(
c
*
genericapiserver
.
Config
)
error
{
// ApplyTo requires already applied OpenAPIConfig and EgressSelector if present.
func
(
o
*
BuiltInAuthenticationOptions
)
ApplyTo
(
authInfo
*
genericapiserver
.
AuthenticationInfo
,
secureServing
*
genericapiserver
.
SecureServingInfo
,
openAPIConfig
*
openapicommon
.
Config
,
extclient
kubernetes
.
Interface
,
versionedInformer
informers
.
SharedInformerFactory
)
error
{
if
o
==
nil
{
return
nil
}
if
o
.
ClientCert
!=
nil
{
clientCertificateCAContentProvider
,
err
:=
o
.
ClientCert
.
GetClientCAContentProvider
()
if
openAPIConfig
==
nil
{
return
errors
.
New
(
"uninitialized OpenAPIConfig"
)
}
authenticatorConfig
,
err
:=
o
.
ToAuthenticationConfig
()
if
err
!=
nil
{
return
fmt
.
Errorf
(
"unable to load client CA file: %v"
,
err
)
return
err
}
if
err
=
c
.
Authentication
.
ApplyClientCert
(
clientCertificateCAContentProvider
,
c
.
SecureServing
);
err
!=
nil
{
if
authenticatorConfig
.
ClientCAContentProvider
!=
nil
{
if
err
=
authInfo
.
ApplyClientCert
(
authenticatorConfig
.
ClientCAContentProvider
,
secureServing
);
err
!=
nil
{
return
fmt
.
Errorf
(
"unable to load client CA file: %v"
,
err
)
}
}
if
o
.
RequestHeader
!=
nil
{
requestHeaderConfig
,
err
:=
o
.
RequestHeader
.
ToAuthenticationRequestHeaderConfig
()
if
err
!=
nil
{
return
fmt
.
Errorf
(
"unable to create request header authentication config: %v"
,
err
)
}
if
requestHeaderConfig
!=
nil
{
if
err
=
c
.
Authentication
.
ApplyClientCert
(
requestHeaderConfig
.
CAContentProvider
,
c
.
SecureServing
);
err
!=
nil
{
if
authenticatorConfig
.
RequestHeaderConfig
!=
nil
&&
authenticatorConfig
.
RequestHeaderConfig
.
CAContentProvider
!=
nil
{
if
err
=
authInfo
.
ApplyClientCert
(
authenticatorConfig
.
RequestHeaderConfig
.
CAContentProvider
,
secureServing
);
err
!=
nil
{
return
fmt
.
Errorf
(
"unable to load client CA file: %v"
,
err
)
}
}
}
c
.
Authentication
.
SupportsBasicAuth
=
o
.
PasswordFile
!=
nil
&&
len
(
o
.
PasswordFile
.
BasicAuthFile
)
>
0
authInfo
.
SupportsBasicAuth
=
o
.
PasswordFile
!=
nil
&&
len
(
o
.
PasswordFile
.
BasicAuthFile
)
>
0
c
.
Authentication
.
APIAudiences
=
o
.
APIAudiences
authInfo
.
APIAudiences
=
o
.
APIAudiences
if
o
.
ServiceAccounts
!=
nil
&&
o
.
ServiceAccounts
.
Issuer
!=
""
&&
len
(
o
.
APIAudiences
)
==
0
{
c
.
Authentication
.
APIAudiences
=
authenticator
.
Audiences
{
o
.
ServiceAccounts
.
Issuer
}
authInfo
.
APIAudiences
=
authenticator
.
Audiences
{
o
.
ServiceAccounts
.
Issuer
}
}
if
o
.
ServiceAccounts
.
Lookup
||
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
TokenRequest
)
{
authenticatorConfig
.
ServiceAccountTokenGetter
=
serviceaccountcontroller
.
NewGetterFromClient
(
extclient
,
versionedInformer
.
Core
()
.
V1
()
.
Secrets
()
.
Lister
(),
versionedInformer
.
Core
()
.
V1
()
.
ServiceAccounts
()
.
Lister
(),
versionedInformer
.
Core
()
.
V1
()
.
Pods
()
.
Lister
(),
)
}
authenticatorConfig
.
BootstrapTokenAuthenticator
=
bootstrap
.
NewTokenAuthenticator
(
versionedInformer
.
Core
()
.
V1
()
.
Secrets
()
.
Lister
()
.
Secrets
(
metav1
.
NamespaceSystem
),
)
authInfo
.
Authenticator
,
openAPIConfig
.
SecurityDefinitions
,
err
=
authenticatorConfig
.
New
()
if
err
!=
nil
{
return
err
}
return
nil
...
...
vendor/k8s.io/kubernetes/pkg/kubelet/apis/podresources/server.go
View file @
b0260b33
...
...
@@ -26,6 +26,7 @@ import (
// DevicesProvider knows how to provide the devices used by the given container
type
DevicesProvider
interface
{
GetDevices
(
podUID
,
containerName
string
)
[]
*
v1alpha1
.
ContainerDevices
UpdateAllocatedDevices
()
}
// PodsProvider knows how to provide the pods admitted by the node
...
...
@@ -52,6 +53,7 @@ func NewPodResourcesServer(podsProvider PodsProvider, devicesProvider DevicesPro
func
(
p
*
podResourcesServer
)
List
(
ctx
context
.
Context
,
req
*
v1alpha1
.
ListPodResourcesRequest
)
(
*
v1alpha1
.
ListPodResourcesResponse
,
error
)
{
pods
:=
p
.
podsProvider
.
GetPods
()
podResources
:=
make
([]
*
v1alpha1
.
PodResources
,
len
(
pods
))
p
.
devicesProvider
.
UpdateAllocatedDevices
()
for
i
,
pod
:=
range
pods
{
pRes
:=
v1alpha1
.
PodResources
{
...
...
vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager.go
View file @
b0260b33
...
...
@@ -113,6 +113,9 @@ type ContainerManager interface {
// GetTopologyPodAdmitHandler returns an instance of the TopologyManager for Pod Admission
GetTopologyPodAdmitHandler
()
topologymanager
.
Manager
// UpdateAllocatedDevices frees any Devices that are bound to terminated pods.
UpdateAllocatedDevices
()
}
type
NodeConfig
struct
{
...
...
vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_linux.go
View file @
b0260b33
...
...
@@ -925,3 +925,7 @@ func (cm *containerManagerImpl) GetDevices(podUID, containerName string) []*podr
func
(
cm
*
containerManagerImpl
)
ShouldResetExtendedResourceCapacity
()
bool
{
return
cm
.
deviceManager
.
ShouldResetExtendedResourceCapacity
()
}
func
(
cm
*
containerManagerImpl
)
UpdateAllocatedDevices
()
{
cm
.
deviceManager
.
UpdateAllocatedDevices
()
}
vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_stub.go
View file @
b0260b33
...
...
@@ -121,6 +121,10 @@ func (cm *containerManagerStub) GetTopologyPodAdmitHandler() topologymanager.Man
return
nil
}
func
(
cm
*
containerManagerStub
)
UpdateAllocatedDevices
()
{
return
}
func
NewStubContainerManager
()
ContainerManager
{
return
&
containerManagerStub
{
shouldResetExtendedResourceCapacity
:
false
}
}
...
...
vendor/k8s.io/kubernetes/pkg/kubelet/cm/container_manager_windows.go
View file @
b0260b33
...
...
@@ -181,3 +181,7 @@ func (cm *containerManagerImpl) ShouldResetExtendedResourceCapacity() bool {
func
(
cm
*
containerManagerImpl
)
GetTopologyPodAdmitHandler
()
topologymanager
.
Manager
{
return
nil
}
func
(
cm
*
containerManagerImpl
)
UpdateAllocatedDevices
()
{
return
}
vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager.go
View file @
b0260b33
...
...
@@ -594,9 +594,9 @@ func (m *ManagerImpl) readCheckpoint() error {
return
nil
}
//
updateAllocatedDevices gets a list of active pods and then frees any Devices that are bound to
// terminated pods. Returns error on failure.
func
(
m
*
ManagerImpl
)
updateAllocatedDevices
(
activePods
[]
*
v1
.
Pod
)
{
//
UpdateAllocatedDevices frees any Devices that are bound to terminated pods.
func
(
m
*
ManagerImpl
)
UpdateAllocatedDevices
()
{
activePods
:=
m
.
activePods
()
if
!
m
.
sourcesReady
.
AllReady
()
{
return
}
...
...
@@ -772,7 +772,7 @@ func (m *ManagerImpl) allocateContainerResources(pod *v1.Pod, container *v1.Cont
// Updates allocatedDevices to garbage collect any stranded resources
// before doing the device plugin allocation.
if
!
allocatedDevicesUpdated
{
m
.
updateAllocatedDevices
(
m
.
activePods
()
)
m
.
UpdateAllocatedDevices
(
)
allocatedDevicesUpdated
=
true
}
allocDevices
,
err
:=
m
.
devicesToAllocate
(
podUID
,
contName
,
resource
,
needed
,
devicesToReuse
[
resource
])
...
...
@@ -787,7 +787,7 @@ func (m *ManagerImpl) allocateContainerResources(pod *v1.Pod, container *v1.Cont
// Manager.Allocate involves RPC calls to device plugin, which
// could be heavy-weight. Therefore we want to perform this operation outside
// mutex lock. Note if Allocate call fails, we may leave container resources
// partially allocated for the failed container. We rely on
u
pdateAllocatedDevices()
// partially allocated for the failed container. We rely on
U
pdateAllocatedDevices()
// to garbage collect these resources later. Another side effect is that if
// we have X resource A and Y resource B in total, and two containers, container1
// and container2 both require X resource A and Y resource B. Both allocation
...
...
vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/manager_stub.go
View file @
b0260b33
...
...
@@ -78,3 +78,8 @@ func (h *ManagerStub) GetDevices(_, _ string) []*podresourcesapi.ContainerDevice
func
(
h
*
ManagerStub
)
ShouldResetExtendedResourceCapacity
()
bool
{
return
false
}
// UpdateAllocatedDevices returns nothing
func
(
h
*
ManagerStub
)
UpdateAllocatedDevices
()
{
return
}
vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/topology_hints.go
View file @
b0260b33
...
...
@@ -29,7 +29,7 @@ import (
// container are created.
func
(
m
*
ManagerImpl
)
GetTopologyHints
(
pod
v1
.
Pod
,
container
v1
.
Container
)
map
[
string
][]
topologymanager
.
TopologyHint
{
// Garbage collect any stranded device resources before providing TopologyHints
m
.
updateAllocatedDevices
(
m
.
activePods
()
)
m
.
UpdateAllocatedDevices
(
)
// Loop through all device resources and generate TopologyHints for them..
deviceHints
:=
make
(
map
[
string
][]
topologymanager
.
TopologyHint
)
...
...
vendor/k8s.io/kubernetes/pkg/kubelet/cm/devicemanager/types.go
View file @
b0260b33
...
...
@@ -68,6 +68,9 @@ type Manager interface {
// TopologyManager HintProvider provider indicates the Device Manager implements the Topology Manager Interface
// and is consulted to make Topology aware resource alignments
GetTopologyHints
(
pod
v1
.
Pod
,
container
v1
.
Container
)
map
[
string
][]
topologymanager
.
TopologyHint
// UpdateAllocatedDevices frees any Devices that are bound to terminated pods.
UpdateAllocatedDevices
()
}
// DeviceRunContainerOptions contains the combined container runtime settings to consume its allocated devices.
...
...
vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_network_linux.go
View file @
b0260b33
...
...
@@ -77,6 +77,22 @@ func (kl *Kubelet) syncNetworkUtil() {
klog
.
Errorf
(
"Failed to ensure rule to drop packet marked by %v in %v chain %v: %v"
,
KubeMarkDropChain
,
utiliptables
.
TableFilter
,
KubeFirewallChain
,
err
)
return
}
// drop all non-local packets to localhost if they're not part of an existing
// forwarded connection. See #90259
if
!
kl
.
iptClient
.
IsIpv6
()
{
// ipv6 doesn't have this issue
if
_
,
err
:=
kl
.
iptClient
.
EnsureRule
(
utiliptables
.
Append
,
utiliptables
.
TableFilter
,
KubeFirewallChain
,
"-m"
,
"comment"
,
"--comment"
,
"block incoming localnet connections"
,
"--dst"
,
"127.0.0.0/8"
,
"!"
,
"--src"
,
"127.0.0.0/8"
,
"-m"
,
"conntrack"
,
"!"
,
"--ctstate"
,
"RELATED,ESTABLISHED,DNAT"
,
"-j"
,
"DROP"
);
err
!=
nil
{
klog
.
Errorf
(
"Failed to ensure rule to drop invalid localhost packets in %v chain %v: %v"
,
utiliptables
.
TableFilter
,
KubeFirewallChain
,
err
)
return
}
}
if
_
,
err
:=
kl
.
iptClient
.
EnsureRule
(
utiliptables
.
Prepend
,
utiliptables
.
TableFilter
,
utiliptables
.
ChainOutput
,
"-j"
,
string
(
KubeFirewallChain
));
err
!=
nil
{
klog
.
Errorf
(
"Failed to ensure that %s chain %s jumps to %s: %v"
,
utiliptables
.
TableFilter
,
utiliptables
.
ChainOutput
,
KubeFirewallChain
,
err
)
return
...
...
vendor/k8s.io/kubernetes/pkg/registry/rbac/BUILD
View file @
b0260b33
...
...
@@ -57,5 +57,7 @@ go_test(
"//pkg/apis/core/helper:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//vendor/github.com/google/gofuzz:go_default_library",
],
)
vendor/k8s.io/kubernetes/pkg/registry/rbac/helpers.go
View file @
b0260b33
...
...
@@ -44,6 +44,7 @@ func IsOnlyMutatingGCFields(obj, old runtime.Object, equalities conversion.Equal
copiedMeta
.
SetOwnerReferences
(
oldMeta
.
GetOwnerReferences
())
copiedMeta
.
SetFinalizers
(
oldMeta
.
GetFinalizers
())
copiedMeta
.
SetSelfLink
(
oldMeta
.
GetSelfLink
())
copiedMeta
.
SetManagedFields
(
oldMeta
.
GetManagedFields
())
return
equalities
.
DeepEqual
(
copied
,
old
)
}
vendor/k8s.io/kubernetes/pkg/scheduler/eventhandlers.go
View file @
b0260b33
...
...
@@ -286,8 +286,8 @@ func responsibleForPod(pod *v1.Pod, schedulerName string) bool {
// skipPodUpdate checks whether the specified pod update should be ignored.
// This function will return true if
// - The pod has already been assumed, AND
// - The pod has only its ResourceVersion, Spec.NodeName
and/or Annotations
// updated.
// - The pod has only its ResourceVersion, Spec.NodeName
, Annotations,
//
ManagedFields, Finalizers and/or Conditions
updated.
func
(
sched
*
Scheduler
)
skipPodUpdate
(
pod
*
v1
.
Pod
)
bool
{
// Non-assumed pods should never be skipped.
isAssumed
,
err
:=
sched
.
SchedulerCache
.
IsAssumedPod
(
pod
)
...
...
@@ -320,6 +320,10 @@ func (sched *Scheduler) skipPodUpdate(pod *v1.Pod) bool {
// Annotations must be excluded for the reasons described in
// https://github.com/kubernetes/kubernetes/issues/52914.
p
.
Annotations
=
nil
// The following might be changed by external controllers, but they don't
// affect scheduling decisions.
p
.
Finalizers
=
nil
p
.
Status
.
Conditions
=
nil
return
p
}
assumedPodCopy
,
podCopy
:=
f
(
assumedPod
),
f
(
pod
)
...
...
vendor/k8s.io/legacy-cloud-providers/aws/aws.go
View file @
b0260b33
...
...
@@ -25,6 +25,7 @@ import (
"io"
"net"
"path"
"regexp"
"sort"
"strconv"
"strings"
...
...
@@ -1202,7 +1203,13 @@ func azToRegion(az string) (string, error) {
if
len
(
az
)
<
1
{
return
""
,
fmt
.
Errorf
(
"invalid (empty) AZ"
)
}
region
:=
az
[
:
len
(
az
)
-
1
]
r
:=
regexp
.
MustCompile
(
`^([a-zA-Z]+-)+\d+`
)
region
:=
r
.
FindString
(
az
)
if
region
==
""
{
return
""
,
fmt
.
Errorf
(
"invalid AZ: %s"
,
az
)
}
return
region
,
nil
}
...
...
vendor/k8s.io/legacy-cloud-providers/azure/azure_instances.go
View file @
b0260b33
...
...
@@ -73,7 +73,7 @@ func (az *Cloud) NodeAddresses(ctx context.Context, name types.NodeName) ([]v1.N
}
if
az
.
UseInstanceMetadata
{
metadata
,
err
:=
az
.
metadata
.
GetMetadata
(
cacheReadType
Unsafe
)
metadata
,
err
:=
az
.
metadata
.
GetMetadata
(
cacheReadType
Default
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -259,7 +259,7 @@ func (az *Cloud) InstanceID(ctx context.Context, name types.NodeName) (string, e
}
if
az
.
UseInstanceMetadata
{
metadata
,
err
:=
az
.
metadata
.
GetMetadata
(
cacheReadType
Unsafe
)
metadata
,
err
:=
az
.
metadata
.
GetMetadata
(
cacheReadType
Default
)
if
err
!=
nil
{
return
""
,
err
}
...
...
@@ -346,7 +346,7 @@ func (az *Cloud) InstanceType(ctx context.Context, name types.NodeName) (string,
}
if
az
.
UseInstanceMetadata
{
metadata
,
err
:=
az
.
metadata
.
GetMetadata
(
cacheReadType
Unsafe
)
metadata
,
err
:=
az
.
metadata
.
GetMetadata
(
cacheReadType
Default
)
if
err
!=
nil
{
return
""
,
err
}
...
...
vendor/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer.go
View file @
b0260b33
...
...
@@ -405,7 +405,7 @@ func (az *Cloud) getServiceLoadBalancerStatus(service *v1.Service, lb *network.L
return
nil
,
nil
}
isInternal
:=
requiresInternalLoadBalancer
(
service
)
lbFrontendIPConfigName
:=
az
.
getFrontendIPConfigName
(
service
,
subnet
(
service
)
)
lbFrontendIPConfigName
:=
az
.
getFrontendIPConfigName
(
service
)
serviceName
:=
getServiceName
(
service
)
for
_
,
ipConfiguration
:=
range
*
lb
.
FrontendIPConfigurations
{
if
lbFrontendIPConfigName
==
*
ipConfiguration
.
Name
{
...
...
@@ -695,7 +695,7 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service,
}
lbName
:=
*
lb
.
Name
klog
.
V
(
2
)
.
Infof
(
"reconcileLoadBalancer for service(%s): lb(%s) wantLb(%t) resolved load balancer name"
,
serviceName
,
lbName
,
wantLb
)
lbFrontendIPConfigName
:=
az
.
getFrontendIPConfigName
(
service
,
subnet
(
service
)
)
lbFrontendIPConfigName
:=
az
.
getFrontendIPConfigName
(
service
)
lbFrontendIPConfigID
:=
az
.
getFrontendIPConfigID
(
lbName
,
lbFrontendIPConfigName
)
lbBackendPoolName
:=
getBackendPoolName
(
az
.
ipv6DualStackEnabled
,
clusterName
,
service
)
lbBackendPoolID
:=
az
.
getBackendPoolID
(
lbName
,
lbBackendPoolName
)
...
...
@@ -1028,7 +1028,7 @@ func (az *Cloud) reconcileLoadBalancerRule(
}
for
_
,
protocol
:=
range
protocols
{
lbRuleName
:=
az
.
getLoadBalancerRuleName
(
service
,
protocol
,
port
.
Port
,
subnet
(
service
)
)
lbRuleName
:=
az
.
getLoadBalancerRuleName
(
service
,
protocol
,
port
.
Port
)
klog
.
V
(
2
)
.
Infof
(
"reconcileLoadBalancerRule lb name (%s) rule name (%s)"
,
lbName
,
lbRuleName
)
transportProto
,
_
,
probeProto
,
err
:=
getProtocolsFromKubernetesProtocol
(
protocol
)
...
...
@@ -1082,15 +1082,9 @@ func (az *Cloud) reconcileLoadBalancerRule(
BackendPort
:
to
.
Int32Ptr
(
port
.
Port
),
DisableOutboundSnat
:
to
.
BoolPtr
(
az
.
disableLoadBalancerOutboundSNAT
()),
EnableTCPReset
:
enableTCPReset
,
EnableFloatingIP
:
to
.
BoolPtr
(
true
),
},
}
// LB does not support floating IPs for IPV6 rules
if
utilnet
.
IsIPv6String
(
service
.
Spec
.
ClusterIP
)
{
expectedRule
.
BackendPort
=
to
.
Int32Ptr
(
port
.
NodePort
)
expectedRule
.
EnableFloatingIP
=
to
.
BoolPtr
(
false
)
}
else
{
expectedRule
.
EnableFloatingIP
=
to
.
BoolPtr
(
true
)
}
if
protocol
==
v1
.
ProtocolTCP
{
expectedRule
.
LoadBalancingRulePropertiesFormat
.
IdleTimeoutInMinutes
=
lbIdleTimeout
...
...
vendor/k8s.io/legacy-cloud-providers/azure/azure_managedDiskController.go
View file @
b0260b33
...
...
@@ -78,10 +78,12 @@ func (c *ManagedDiskController) CreateManagedDisk(options *ManagedDiskOptions) (
var
err
error
klog
.
V
(
4
)
.
Infof
(
"azureDisk - creating new managed Name:%s StorageAccountType:%s Size:%v"
,
options
.
DiskName
,
options
.
StorageAccountType
,
options
.
SizeGB
)
var
createZones
*
[]
string
var
createZones
[]
string
if
len
(
options
.
AvailabilityZone
)
>
0
{
zoneList
:=
[]
string
{
c
.
common
.
cloud
.
GetZoneID
(
options
.
AvailabilityZone
)}
createZones
=
&
zoneList
requestedZone
:=
c
.
common
.
cloud
.
GetZoneID
(
options
.
AvailabilityZone
)
if
requestedZone
!=
""
{
createZones
=
append
(
createZones
,
requestedZone
)
}
}
// insert original tags to newTags
...
...
@@ -146,13 +148,16 @@ func (c *ManagedDiskController) CreateManagedDisk(options *ManagedDiskOptions) (
model
:=
compute
.
Disk
{
Location
:
&
c
.
common
.
location
,
Tags
:
newTags
,
Zones
:
createZones
,
Sku
:
&
compute
.
DiskSku
{
Name
:
diskSku
,
},
DiskProperties
:
&
diskProperties
,
}
if
len
(
createZones
)
>
0
{
model
.
Zones
=
&
createZones
}
if
options
.
ResourceGroup
==
""
{
options
.
ResourceGroup
=
c
.
common
.
resourceGroup
}
...
...
vendor/k8s.io/legacy-cloud-providers/azure/azure_standard.go
View file @
b0260b33
...
...
@@ -66,6 +66,8 @@ const (
nicFailedState
=
"Failed"
storageAccountNameMaxLength
=
24
frontendIPConfigNameMaxLength
=
80
loadBalancerRuleNameMaxLength
=
80
)
var
errNotInVMSet
=
errors
.
New
(
"vm is not in the vmset"
)
...
...
@@ -274,12 +276,21 @@ func getBackendPoolName(ipv6DualStackEnabled bool, clusterName string, service *
return
clusterName
}
func
(
az
*
Cloud
)
getLoadBalancerRuleName
(
service
*
v1
.
Service
,
protocol
v1
.
Protocol
,
port
int32
,
subnetName
*
string
)
string
{
func
(
az
*
Cloud
)
getLoadBalancerRuleName
(
service
*
v1
.
Service
,
protocol
v1
.
Protocol
,
port
int32
)
string
{
prefix
:=
az
.
getRulePrefix
(
service
)
if
subnetName
==
nil
{
return
fmt
.
Sprintf
(
"%s-%s-%d"
,
prefix
,
protocol
,
port
)
ruleName
:=
fmt
.
Sprintf
(
"%s-%s-%d"
,
prefix
,
protocol
,
port
)
subnet
:=
subnet
(
service
)
if
subnet
==
nil
{
return
ruleName
}
return
fmt
.
Sprintf
(
"%s-%s-%s-%d"
,
prefix
,
*
subnetName
,
protocol
,
port
)
// Load balancer rule name must be less or equal to 80 characters, so excluding the hyphen two segments cannot exceed 79
subnetSegment
:=
*
subnet
if
len
(
ruleName
)
+
len
(
subnetSegment
)
+
1
>
loadBalancerRuleNameMaxLength
{
subnetSegment
=
subnetSegment
[
:
loadBalancerRuleNameMaxLength
-
len
(
ruleName
)
-
1
]
}
return
fmt
.
Sprintf
(
"%s-%s-%s-%d"
,
prefix
,
subnetSegment
,
protocol
,
port
)
}
func
(
az
*
Cloud
)
getSecurityRuleName
(
service
*
v1
.
Service
,
port
v1
.
ServicePort
,
sourceAddrPrefix
string
)
string
{
...
...
@@ -317,10 +328,17 @@ func (az *Cloud) serviceOwnsFrontendIP(fip network.FrontendIPConfiguration, serv
return
strings
.
HasPrefix
(
*
fip
.
Name
,
baseName
)
}
func
(
az
*
Cloud
)
getFrontendIPConfigName
(
service
*
v1
.
Service
,
subnetName
*
string
)
string
{
func
(
az
*
Cloud
)
getFrontendIPConfigName
(
service
*
v1
.
Service
)
string
{
baseName
:=
az
.
GetLoadBalancerName
(
context
.
TODO
(),
""
,
service
)
subnetName
:=
subnet
(
service
)
if
subnetName
!=
nil
{
return
fmt
.
Sprintf
(
"%s-%s"
,
baseName
,
*
subnetName
)
ipcName
:=
fmt
.
Sprintf
(
"%s-%s"
,
baseName
,
*
subnetName
)
// Azure lb front end configuration name must not exceed 80 characters
if
len
(
ipcName
)
>
frontendIPConfigNameMaxLength
{
ipcName
=
ipcName
[
:
frontendIPConfigNameMaxLength
]
}
return
ipcName
}
return
baseName
}
...
...
vendor/modules.txt
View file @
b0260b33
...
...
@@ -1132,7 +1132,7 @@ gopkg.in/square/go-jose.v2/jwt
gopkg.in/warnings.v0
# gopkg.in/yaml.v2 v2.2.8
gopkg.in/yaml.v2
# k8s.io/api v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/api v1.17.
6
-k3s1
# k8s.io/api v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/api v1.17.
7
-k3s1
k8s.io/api/admission/v1
k8s.io/api/admission/v1beta1
k8s.io/api/admissionregistration/v1
...
...
@@ -1176,7 +1176,7 @@ k8s.io/api/settings/v1alpha1
k8s.io/api/storage/v1
k8s.io/api/storage/v1alpha1
k8s.io/api/storage/v1beta1
# k8s.io/apiextensions-apiserver v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.
6
-k3s1
# k8s.io/apiextensions-apiserver v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/apiextensions-apiserver v1.17.
7
-k3s1
k8s.io/apiextensions-apiserver/pkg/apihelpers
k8s.io/apiextensions-apiserver/pkg/apis/apiextensions
k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/install
...
...
@@ -1224,7 +1224,7 @@ k8s.io/apiextensions-apiserver/pkg/generated/openapi
k8s.io/apiextensions-apiserver/pkg/registry/customresource
k8s.io/apiextensions-apiserver/pkg/registry/customresource/tableconvertor
k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition
# k8s.io/apimachinery v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/apimachinery v1.17.
6
-k3s1
# k8s.io/apimachinery v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/apimachinery v1.17.
7
-k3s1
k8s.io/apimachinery/pkg/api/equality
k8s.io/apimachinery/pkg/api/errors
k8s.io/apimachinery/pkg/api/meta
...
...
@@ -1286,7 +1286,7 @@ k8s.io/apimachinery/pkg/watch
k8s.io/apimachinery/third_party/forked/golang/json
k8s.io/apimachinery/third_party/forked/golang/netutil
k8s.io/apimachinery/third_party/forked/golang/reflect
# k8s.io/apiserver v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/apiserver v1.17.
6
-k3s1
# k8s.io/apiserver v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/apiserver v1.17.
7
-k3s1
k8s.io/apiserver/pkg/admission
k8s.io/apiserver/pkg/admission/configuration
k8s.io/apiserver/pkg/admission/initializer
...
...
@@ -1403,7 +1403,7 @@ k8s.io/apiserver/plugin/pkg/authenticator/request/basicauth
k8s.io/apiserver/plugin/pkg/authenticator/token/oidc
k8s.io/apiserver/plugin/pkg/authenticator/token/webhook
k8s.io/apiserver/plugin/pkg/authorizer/webhook
# k8s.io/cli-runtime v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/cli-runtime v1.17.
6
-k3s1
# k8s.io/cli-runtime v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/cli-runtime v1.17.
7
-k3s1
k8s.io/cli-runtime/pkg/genericclioptions
k8s.io/cli-runtime/pkg/kustomize
k8s.io/cli-runtime/pkg/kustomize/k8sdeps
...
...
@@ -1416,7 +1416,7 @@ k8s.io/cli-runtime/pkg/kustomize/k8sdeps/transformer/patch
k8s.io/cli-runtime/pkg/kustomize/k8sdeps/validator
k8s.io/cli-runtime/pkg/printers
k8s.io/cli-runtime/pkg/resource
# k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => github.com/rancher/kubernetes/staging/src/k8s.io/client-go v1.17.
6
-k3s1
# k8s.io/client-go v11.0.1-0.20190409021438-1a26190bd76a+incompatible => github.com/rancher/kubernetes/staging/src/k8s.io/client-go v1.17.
7
-k3s1
k8s.io/client-go/discovery
k8s.io/client-go/discovery/cached
k8s.io/client-go/discovery/cached/disk
...
...
@@ -1609,20 +1609,20 @@ k8s.io/client-go/util/jsonpath
k8s.io/client-go/util/keyutil
k8s.io/client-go/util/retry
k8s.io/client-go/util/workqueue
# k8s.io/cloud-provider v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/cloud-provider v1.17.
6
-k3s1
# k8s.io/cloud-provider v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/cloud-provider v1.17.
7
-k3s1
k8s.io/cloud-provider
k8s.io/cloud-provider/node/helpers
k8s.io/cloud-provider/service/helpers
k8s.io/cloud-provider/volume
k8s.io/cloud-provider/volume/errors
k8s.io/cloud-provider/volume/helpers
# k8s.io/cluster-bootstrap v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.
6
-k3s1
# k8s.io/cluster-bootstrap v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/cluster-bootstrap v1.17.
7
-k3s1
k8s.io/cluster-bootstrap/token/api
k8s.io/cluster-bootstrap/token/jws
k8s.io/cluster-bootstrap/token/util
k8s.io/cluster-bootstrap/util/secrets
k8s.io/cluster-bootstrap/util/tokens
# k8s.io/code-generator v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/code-generator v1.17.
6
-k3s1
# k8s.io/code-generator v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/code-generator v1.17.
7
-k3s1
k8s.io/code-generator/cmd/client-gen/args
k8s.io/code-generator/cmd/client-gen/generators
k8s.io/code-generator/cmd/client-gen/generators/fake
...
...
@@ -1637,7 +1637,7 @@ k8s.io/code-generator/cmd/lister-gen/args
k8s.io/code-generator/cmd/lister-gen/generators
k8s.io/code-generator/pkg/namer
k8s.io/code-generator/pkg/util
# k8s.io/component-base v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/component-base v1.17.
6
-k3s1
# k8s.io/component-base v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/component-base v1.17.
7
-k3s1
k8s.io/component-base/cli/flag
k8s.io/component-base/cli/globalflag
k8s.io/component-base/codec
...
...
@@ -1654,10 +1654,10 @@ k8s.io/component-base/metrics/prometheus/version
k8s.io/component-base/metrics/prometheus/workqueue
k8s.io/component-base/version
k8s.io/component-base/version/verflag
# k8s.io/cri-api v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/cri-api v1.17.
6
-k3s1
# k8s.io/cri-api v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/cri-api v1.17.
7
-k3s1
k8s.io/cri-api/pkg/apis
k8s.io/cri-api/pkg/apis/runtime/v1alpha2
# k8s.io/csi-translation-lib v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.
6
-k3s1
# k8s.io/csi-translation-lib v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/csi-translation-lib v1.17.
7
-k3s1
k8s.io/csi-translation-lib
k8s.io/csi-translation-lib/plugins
# k8s.io/gengo v0.0.0-20191120174120-e74f70b9b27e
...
...
@@ -1672,7 +1672,7 @@ k8s.io/gengo/types
k8s.io/heapster/metrics/api/v1/types
# k8s.io/klog v1.0.0
k8s.io/klog
# k8s.io/kube-aggregator v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.
6
-k3s1
# k8s.io/kube-aggregator v0.17.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kube-aggregator v1.17.
7
-k3s1
k8s.io/kube-aggregator/pkg/apis/apiregistration
k8s.io/kube-aggregator/pkg/apis/apiregistration/install
k8s.io/kube-aggregator/pkg/apis/apiregistration/v1
...
...
@@ -1700,7 +1700,7 @@ k8s.io/kube-aggregator/pkg/controllers/status
k8s.io/kube-aggregator/pkg/registry/apiservice
k8s.io/kube-aggregator/pkg/registry/apiservice/etcd
k8s.io/kube-aggregator/pkg/registry/apiservice/rest
# k8s.io/kube-controller-manager v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.
6
-k3s1
# k8s.io/kube-controller-manager v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kube-controller-manager v1.17.
7
-k3s1
k8s.io/kube-controller-manager/config/v1alpha1
# k8s.io/kube-openapi v0.0.0-20200410145947-bcb3869e6f29
k8s.io/kube-openapi/pkg/aggregator
...
...
@@ -1711,12 +1711,12 @@ k8s.io/kube-openapi/pkg/schemaconv
k8s.io/kube-openapi/pkg/util
k8s.io/kube-openapi/pkg/util/proto
k8s.io/kube-openapi/pkg/util/proto/validation
# k8s.io/kube-proxy v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kube-proxy v1.17.
6
-k3s1
# k8s.io/kube-proxy v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kube-proxy v1.17.
7
-k3s1
k8s.io/kube-proxy/config/v1alpha1
# k8s.io/kube-scheduler v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.
6
-k3s1
# k8s.io/kube-scheduler v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kube-scheduler v1.17.
7
-k3s1
k8s.io/kube-scheduler/config/v1
k8s.io/kube-scheduler/config/v1alpha1
# k8s.io/kubectl v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kubectl v1.17.
6
-k3s1
# k8s.io/kubectl v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kubectl v1.17.
7
-k3s1
k8s.io/kubectl/pkg/apps
k8s.io/kubectl/pkg/cmd
k8s.io/kubectl/pkg/cmd/annotate
...
...
@@ -1792,11 +1792,11 @@ k8s.io/kubectl/pkg/util/storage
k8s.io/kubectl/pkg/util/templates
k8s.io/kubectl/pkg/util/term
k8s.io/kubectl/pkg/validation
# k8s.io/kubelet v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kubelet v1.17.
6
-k3s1
# k8s.io/kubelet v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/kubelet v1.17.
7
-k3s1
k8s.io/kubelet/config/v1beta1
k8s.io/kubelet/pkg/apis/deviceplugin/v1beta1
k8s.io/kubelet/pkg/apis/pluginregistration/v1
# k8s.io/kubernetes v1.17.0 => github.com/rancher/kubernetes v1.17.
6
-k3s1
# k8s.io/kubernetes v1.17.0 => github.com/rancher/kubernetes v1.17.
7
-k3s1
k8s.io/kubernetes/cmd/cloud-controller-manager/app
k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config
k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/scheme
...
...
@@ -2534,7 +2534,7 @@ k8s.io/kubernetes/third_party/forked/gonum/graph
k8s.io/kubernetes/third_party/forked/gonum/graph/internal/linear
k8s.io/kubernetes/third_party/forked/gonum/graph/simple
k8s.io/kubernetes/third_party/forked/gonum/graph/traverse
# k8s.io/legacy-cloud-providers v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.
6
-k3s1
# k8s.io/legacy-cloud-providers v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/legacy-cloud-providers v1.17.
7
-k3s1
k8s.io/legacy-cloud-providers/aws
k8s.io/legacy-cloud-providers/azure
k8s.io/legacy-cloud-providers/azure/auth
...
...
@@ -2543,7 +2543,7 @@ k8s.io/legacy-cloud-providers/openstack
k8s.io/legacy-cloud-providers/vsphere
k8s.io/legacy-cloud-providers/vsphere/vclib
k8s.io/legacy-cloud-providers/vsphere/vclib/diskmanagers
# k8s.io/metrics v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/metrics v1.17.
6
-k3s1
# k8s.io/metrics v0.0.0 => github.com/rancher/kubernetes/staging/src/k8s.io/metrics v1.17.
7
-k3s1
k8s.io/metrics/pkg/apis/custom_metrics
k8s.io/metrics/pkg/apis/custom_metrics/v1beta1
k8s.io/metrics/pkg/apis/custom_metrics/v1beta2
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment