Skip to content

Commit 8bd0b45

Browse files
author
Jake Sanders
committed
use static token to authenticate glbc
1 parent b3ad4cd commit 8bd0b45

File tree

4 files changed

+122
-1
lines changed

4 files changed

+122
-1
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: Role
3+
metadata:
4+
name: system:controller:glbc
5+
namespace: kube-system
6+
labels:
7+
addonmanager.kubernetes.io/mode: Reconcile
8+
rules:
9+
- apiGroups: [""]
10+
resources: ["configmaps"]
11+
verbs: ["get", "list", "watch", "update", "create", "patch"]
12+
---
13+
apiVersion: rbac.authorization.k8s.io/v1
14+
kind: ClusterRole
15+
metadata:
16+
name: system:controller:glbc
17+
labels:
18+
addonmanager.kubernetes.io/mode: Reconcile
19+
rules:
20+
- apiGroups: [""]
21+
resources: ["secrets"]
22+
verbs: ["get"]
23+
- apiGroups: [""]
24+
resources: ["events"]
25+
verbs: ["get", "list", "watch", "update", "create", "patch"]
26+
- apiGroups: [""]
27+
resources: ["endpoints", "services", "pods", "nodes", "namespaces"]
28+
verbs: ["get", "list", "watch"]
29+
# TODO: switch to patch services/status
30+
# https://github.com/kubernetes/ingress-gce/blob/4918eb2f0f484f09ac9e5a975907a9b16ed2b344/pkg/neg/controller.go#L339-L342
31+
# https://github.com/kubernetes/ingress-gce/blob/4918eb2f0f484f09ac9e5a975907a9b16ed2b344/pkg/neg/controller.go#L359-L361
32+
- apiGroups: [""]
33+
resources: ["services"]
34+
verbs: ["update", "patch"]
35+
- apiGroups: ["extensions", "networking.k8s.io"]
36+
resources: ["ingresses"]
37+
verbs: ["get", "list", "watch"]
38+
# For now, GLBC annotates ingress resources with various state and statuses:
39+
# https://github.com/kubernetes/ingress-gce/blob/50d49b077d9ab4362a02fae05f94e433cd3f08dc/pkg/controller/controller.go#L579
40+
# TODO(rramkumar1): Remove unnecessary `update` permission once statuses are propagated through `ingresses/status`
41+
- apiGroups: ["extensions", "networking.k8s.io"]
42+
resources: ["ingresses"]
43+
verbs: ["update"]
44+
- apiGroups: ["extensions", "networking.k8s.io"]
45+
resources: ["ingresses/status"]
46+
verbs: ["update"]
47+
# GLBC ensures that the `cloud.google.com/backendconfigs` CRD exists in a desired state:
48+
# https://github.com/kubernetes/ingress-gce/blob/4918eb2f0f484f09ac9e5a975907a9b16ed2b344/cmd/glbc/main.go#L93
49+
# TODO(rramkumar1): https://github.com/kubernetes/ingress-gce/issues/744
50+
- apiGroups: ["apiextensions.k8s.io"]
51+
resources: ["customresourcedefinitions"]
52+
verbs: ["get", "list", "watch", "update", "create", "patch"]
53+
- apiGroups: ["cloud.google.com"]
54+
resources: ["backendconfigs"]
55+
verbs: ["get", "list", "watch", "update", "create", "patch"]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: RoleBinding
3+
metadata:
4+
name: system:controller:glbc
5+
namespace: kube-system
6+
labels:
7+
addonmanager.kubernetes.io/mode: Reconcile
8+
roleRef:
9+
apiGroup: rbac.authorization.k8s.io
10+
kind: Role
11+
name: system:controller:glbc
12+
subjects:
13+
- kind: User
14+
name: system:controller:glbc
15+
---
16+
apiVersion: rbac.authorization.k8s.io/v1
17+
kind: ClusterRoleBinding
18+
metadata:
19+
name: system:controller:glbc
20+
labels:
21+
addonmanager.kubernetes.io/mode: Reconcile
22+
roleRef:
23+
apiGroup: rbac.authorization.k8s.io
24+
kind: ClusterRole
25+
name: system:controller:glbc
26+
subjects:
27+
- kind: User
28+
name: system:controller:glbc

cluster/gce/gci/configure-helper.sh

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,9 @@ function create-master-auth {
594594
if [[ -n "${NODE_PROBLEM_DETECTOR_TOKEN:-}" ]]; then
595595
append_or_replace_prefixed_line "${known_tokens_csv}" "${NODE_PROBLEM_DETECTOR_TOKEN}," "system:node-problem-detector,uid:node-problem-detector"
596596
fi
597+
if [[ -n "${GCE_GLBC_TOKEN:-}" ]]; then
598+
append_or_replace_prefixed_line "${known_tokens_csv}" "${GCE_GLBC_TOKEN}," "system:controller:glbc,uid:system:controller:glbc"
599+
fi
597600
local use_cloud_config="false"
598601
cat <<EOF >/etc/gce.conf
599602
[global]
@@ -1048,6 +1051,30 @@ current-context: service-account-context
10481051
EOF
10491052
}
10501053

1054+
function create-l7-lb-controller-kubeconfig {
1055+
echo "Creating l7-lb-controller kubeconfig file"
1056+
mkdir -p /etc/srv/kubernetes/l7-lb-controller
1057+
cat <<EOF >/etc/srv/kubernetes/l7-lb-controller/kubeconfig
1058+
apiVersion: v1
1059+
kind: Config
1060+
users:
1061+
- name: l7-lb-controller
1062+
user:
1063+
token: ${GCE_GLBC_TOKEN}
1064+
clusters:
1065+
- name: local
1066+
cluster:
1067+
insecure-skip-tls-verify: true
1068+
server: https://localhost:443
1069+
contexts:
1070+
- context:
1071+
cluster: local
1072+
user: l7-lb-controller
1073+
name: l7-lb-controller
1074+
current-context: l7-lb-controller
1075+
EOF
1076+
}
1077+
10511078
function create-kubescheduler-kubeconfig {
10521079
echo "Creating kube-scheduler kubeconfig file"
10531080
mkdir -p /etc/srv/kubernetes/kube-scheduler
@@ -2737,6 +2764,8 @@ function start-lb-controller {
27372764
echo "Start GCE L7 pod"
27382765
prepare-log-file /var/log/glbc.log
27392766
setup-addon-manifests "addons" "cluster-loadbalancing/glbc"
2767+
setup-addon-manifests "addons" "rbac/cluster-loadbalancing/glbc"
2768+
create-l7-lb-controller-kubeconfig
27402769

27412770
local -r src_manifest="${KUBE_HOME}/kube-manifests/kubernetes/gci-trusty/glbc.manifest"
27422771
local -r dest_manifest="/etc/kubernetes/manifests/glbc.manifest"
@@ -2906,6 +2935,9 @@ function main() {
29062935
KUBE_CONTROLLER_MANAGER_TOKEN="$(secure_random 32)"
29072936
KUBE_SCHEDULER_TOKEN="$(secure_random 32)"
29082937
KUBE_CLUSTER_AUTOSCALER_TOKEN="$(secure_random 32)"
2938+
if [[ "${ENABLE_L7_LOADBALANCING:-}" == "glbc" ]]; then
2939+
GCE_GLBC_TOKEN="$(secure_random 32)"
2940+
fi
29092941

29102942
setup-os-params
29112943
config-ip-firewall

cluster/gce/manifests/glbc.manifest

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ spec:
3434
- mountPath: /var/log/glbc.log
3535
name: logfile
3636
readOnly: false
37+
- name: srvkube
38+
mountPath: /etc/srv/kubernetes/l7-lb-controller
39+
readOnly: true
3740
resources:
3841
# Request is set to accommodate this pod alongside the other
3942
# master components on a single core master.
@@ -45,7 +48,7 @@ spec:
4548
# TODO: split this out into args when we no longer need to pipe stdout to a file #6428
4649
- sh
4750
- -c
48-
- 'exec /glbc --gce-ratelimit=ga.Operations.Get,qps,10,100 --gce-ratelimit=alpha.Operations.Get,qps,10,100 --gce-ratelimit=ga.BackendServices.Get,qps,1.8,1 --gce-ratelimit=ga.HealthChecks.Get,qps,1.8,1 --gce-ratelimit=alpha.HealthChecks.Get,qps,1.8,1 --gce-ratelimit=beta.NetworkEndpointGroups.Get,qps,1.8,1 --gce-ratelimit=beta.NetworkEndpointGroups.AttachNetworkEndpoints,qps,1.8,1 --gce-ratelimit=beta.NetworkEndpointGroups.DetachNetworkEndpoints,qps,1.8,1 --gce-ratelimit=beta.NetworkEndpointGroups.ListNetworkEndpoints,qps,1.8,1 --verbose --apiserver-host=http://localhost:8080 --default-backend-service=kube-system/default-http-backend --sync-period=600s --running-in-cluster=false --use-real-cloud=true --config-file-path=/etc/gce.conf --healthz-port=8086 1>>/var/log/glbc.log 2>&1'
51+
- 'exec /glbc --gce-ratelimit=ga.Operations.Get,qps,10,100 --gce-ratelimit=alpha.Operations.Get,qps,10,100 --gce-ratelimit=ga.BackendServices.Get,qps,1.8,1 --gce-ratelimit=ga.HealthChecks.Get,qps,1.8,1 --gce-ratelimit=alpha.HealthChecks.Get,qps,1.8,1 --gce-ratelimit=beta.NetworkEndpointGroups.Get,qps,1.8,1 --gce-ratelimit=beta.NetworkEndpointGroups.AttachNetworkEndpoints,qps,1.8,1 --gce-ratelimit=beta.NetworkEndpointGroups.DetachNetworkEndpoints,qps,1.8,1 --gce-ratelimit=beta.NetworkEndpointGroups.ListNetworkEndpoints,qps,1.8,1 --verbose --kubeconfig=/etc/srv/kubernetes/l7-lb-controller/kubeconfig --default-backend-service=kube-system/default-http-backend --sync-period=600s --running-in-cluster=false --use-real-cloud=true --config-file-path=/etc/gce.conf --healthz-port=8086 1>>/var/log/glbc.log 2>&1'
4952
volumes:
5053
- hostPath:
5154
path: /etc/gce.conf
@@ -55,3 +58,6 @@ spec:
5558
path: /var/log/glbc.log
5659
type: FileOrCreate
5760
name: logfile
61+
- name: srvkube
62+
hostPath:
63+
path: /etc/srv/kubernetes/l7-lb-controller

0 commit comments

Comments
 (0)