Skip to content

Commit 2a23d91

Browse files
authored
Merge pull request #18146 from rifelpet/gce-cilium-etcd
Fix cilium-etcd on GCE
2 parents df62871 + c6acfcf commit 2a23d91

28 files changed

Lines changed: 5974 additions & 0 deletions

File tree

cmd/kops/integration_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,20 @@ func TestMinimalGCEInternalLoadBalancer(t *testing.T) {
409409
runTestTerraformGCE(t)
410410
}
411411

412+
// TestMinimalGCEInternalLoadBalancerCiliumEtcd runs tests on a minimal GCE configuration with an internal load balancer and cilium-etcd.
413+
func TestMinimalGCEInternalLoadBalancerCiliumEtcd(t *testing.T) {
414+
newIntegrationTest("minimal-gce-ilb-cilium-etcd.example.com", "minimal_gce_ilb_cilium_etcd").
415+
withCiliumEtcd().
416+
withManagedFiles("etcd-cluster-spec-cilium", "manifests-etcdmanager-cilium-master-us-test1-a").
417+
withAddons(
418+
ciliumAddon,
419+
dnsControllerAddon,
420+
gcpCCMAddon,
421+
gcpPDCSIAddon,
422+
).
423+
runTestTerraformGCE(t)
424+
}
425+
412426
// TestMinimalGCEPublicLoadBalancer runs tests on a minimal GCE configuration with a public load balancer.
413427
func TestMinimalGCEPublicLoadBalancer(t *testing.T) {
414428
newIntegrationTest("minimal-gce-plb.example.com", "minimal_gce_plb").

pkg/model/gcemodel/api_loadbalancer.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"golang.org/x/exp/slices"
2424
"k8s.io/kops/pkg/apis/kops"
25+
"k8s.io/kops/pkg/apis/kops/model"
2526
"k8s.io/kops/pkg/wellknownports"
2627
"k8s.io/kops/pkg/wellknownservices"
2728
"k8s.io/kops/upup/pkg/fi"
@@ -127,6 +128,16 @@ func (b *APILoadBalancerBuilder) addFirewallRules(c *fi.CloudupModelBuilderConte
127128
Allowed: []string{"tcp:" + strconv.Itoa(wellknownports.KopsControllerPort)},
128129
})
129130
}
131+
132+
if model.UseCiliumEtcd(b.Cluster) {
133+
b.AddFirewallRulesTasks(c, "cilium-etcd", &gcetasks.FirewallRule{
134+
Lifecycle: b.Lifecycle,
135+
Network: network,
136+
SourceRanges: b.Cluster.Spec.API.Access,
137+
TargetTags: []string{b.GCETagForRole(kops.InstanceGroupRoleControlPlane)},
138+
Allowed: []string{"tcp:" + strconv.Itoa(wellknownports.EtcdCiliumClientPort)},
139+
})
140+
}
130141
}
131142
return nil
132143

@@ -234,6 +245,24 @@ func (b *APILoadBalancerBuilder) createInternalLB(c *fi.CloudupModelBuilderConte
234245

235246
c.AddTask(fr)
236247
}
248+
249+
if model.UseCiliumEtcd(b.Cluster) {
250+
c.AddTask(&gcetasks.ForwardingRule{
251+
Name: s(b.NameForForwardingRule("cilium-etcd-" + sn.Name)),
252+
Lifecycle: b.Lifecycle,
253+
BackendService: bs,
254+
Ports: []string{strconv.Itoa(wellknownports.EtcdCiliumClientPort)},
255+
IPAddress: ipAddress,
256+
IPProtocol: "TCP",
257+
LoadBalancingScheme: s("INTERNAL"),
258+
Network: network,
259+
Subnetwork: subnet,
260+
Labels: map[string]string{
261+
clusterLabel.Key: clusterLabel.Value,
262+
"name": "cilium-etcd-" + sn.Name,
263+
},
264+
})
265+
}
237266
}
238267
return nil
239268
}
Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
apiVersion: kops.k8s.io/v1alpha2
2+
kind: Cluster
3+
metadata:
4+
creationTimestamp: "2017-01-01T00:00:00Z"
5+
name: minimal-gce-ilb-cilium-etcd.example.com
6+
spec:
7+
api:
8+
loadBalancer:
9+
subnets:
10+
- name: us-test-1
11+
type: Internal
12+
useForInternalApi: true
13+
authorization:
14+
rbac: {}
15+
channel: stable
16+
cloudConfig:
17+
gceServiceAccount: default
18+
gcpPDCSIDriver:
19+
defaultStorageClassName: balanced-csi
20+
enabled: true
21+
version: v1.22.1
22+
manageStorageClasses: true
23+
multizone: true
24+
nodeTags: minimal-gce-ilb-cilium-etcd-example-com-k8s-io-role-node
25+
cloudControllerManager:
26+
allocateNodeCIDRs: true
27+
cidrAllocatorType: CloudAllocator
28+
clusterCIDR: 100.96.0.0/11
29+
clusterName: minimal-gce-ilb-cilium-etcd-example-com
30+
controllers:
31+
- '*'
32+
image: registry.k8s.io/cloud-provider-gcp/cloud-controller-manager:v35.0.0
33+
leaderElection:
34+
leaderElect: true
35+
cloudProvider: gce
36+
clusterDNSDomain: cluster.local
37+
configBase: memfs://tests/minimal-gce-ilb-cilium-etcd.example.com
38+
containerd:
39+
logLevel: info
40+
runc:
41+
version: 1.3.4
42+
sandboxImage: registry.k8s.io/pause:3.10.1
43+
version: 2.1.6
44+
dnsZone: "1"
45+
etcdClusters:
46+
- backups:
47+
backupStore: memfs://tests/minimal-gce-ilb-cilium-etcd.example.com/backups/etcd/main
48+
cpuRequest: 200m
49+
etcdMembers:
50+
- instanceGroup: master-us-test1-a
51+
name: a
52+
manager:
53+
backupRetentionDays: 90
54+
memoryRequest: 100Mi
55+
name: main
56+
version: 3.5.25
57+
- backups:
58+
backupStore: memfs://tests/minimal-gce-ilb-cilium-etcd.example.com/backups/etcd/events
59+
cpuRequest: 100m
60+
etcdMembers:
61+
- instanceGroup: master-us-test1-a
62+
name: a
63+
manager:
64+
backupRetentionDays: 90
65+
memoryRequest: 100Mi
66+
name: events
67+
version: 3.5.25
68+
- backups:
69+
backupStore: memfs://tests/minimal-gce-ilb-cilium-etcd.example.com/backups/etcd/cilium
70+
etcdMembers:
71+
- instanceGroup: master-us-test1-a
72+
name: a
73+
manager:
74+
backupRetentionDays: 90
75+
name: cilium
76+
version: 3.5.25
77+
externalDns:
78+
provider: dns-controller
79+
iam:
80+
legacy: false
81+
keyStore: memfs://tests/minimal-gce-ilb-cilium-etcd.example.com/pki
82+
kubeAPIServer:
83+
allowPrivileged: true
84+
anonymousAuth: false
85+
apiAudiences:
86+
- kubernetes.svc.default
87+
apiServerCount: 1
88+
authorizationMode: Node,RBAC
89+
bindAddress: 0.0.0.0
90+
cloudProvider: external
91+
enableAdmissionPlugins:
92+
- DefaultStorageClass
93+
- DefaultTolerationSeconds
94+
- LimitRanger
95+
- MutatingAdmissionWebhook
96+
- NamespaceLifecycle
97+
- NodeRestriction
98+
- ResourceQuota
99+
- RuntimeClass
100+
- ServiceAccount
101+
- ValidatingAdmissionPolicy
102+
- ValidatingAdmissionWebhook
103+
etcdServers:
104+
- https://127.0.0.1:4001
105+
etcdServersOverrides:
106+
- /events#https://127.0.0.1:4002
107+
image: registry.k8s.io/kube-apiserver:v1.32.0
108+
kubeletPreferredAddressTypes:
109+
- InternalIP
110+
- Hostname
111+
- ExternalIP
112+
logLevel: 2
113+
requestheaderAllowedNames:
114+
- aggregator
115+
requestheaderExtraHeaderPrefixes:
116+
- X-Remote-Extra-
117+
requestheaderGroupHeaders:
118+
- X-Remote-Group
119+
requestheaderUsernameHeaders:
120+
- X-Remote-User
121+
securePort: 443
122+
serviceAccountIssuer: https://api.internal.minimal-gce-ilb-cilium-etcd.example.com
123+
serviceAccountJWKSURI: https://api.internal.minimal-gce-ilb-cilium-etcd.example.com/openid/v1/jwks
124+
serviceClusterIPRange: 100.64.0.0/13
125+
storageBackend: etcd3
126+
kubeControllerManager:
127+
allocateNodeCIDRs: true
128+
attachDetachReconcileSyncPeriod: 1m0s
129+
cloudProvider: external
130+
clusterCIDR: 100.96.0.0/11
131+
clusterName: minimal-gce-ilb-cilium-etcd.example.com
132+
configureCloudRoutes: false
133+
image: registry.k8s.io/kube-controller-manager:v1.32.0
134+
leaderElection:
135+
leaderElect: true
136+
logLevel: 2
137+
useServiceAccountCredentials: true
138+
kubeDNS:
139+
cacheMaxConcurrent: 150
140+
cacheMaxSize: 1000
141+
cpuRequest: 100m
142+
domain: cluster.local
143+
memoryLimit: 170Mi
144+
memoryRequest: 70Mi
145+
nodeLocalDNS:
146+
cpuRequest: 25m
147+
enabled: false
148+
image: registry.k8s.io/dns/k8s-dns-node-cache:1.26.0
149+
memoryRequest: 5Mi
150+
provider: CoreDNS
151+
serverIP: 100.64.0.10
152+
kubeProxy:
153+
clusterCIDR: 100.96.0.0/11
154+
cpuRequest: 100m
155+
enabled: false
156+
image: registry.k8s.io/kube-proxy:v1.32.0
157+
logLevel: 2
158+
kubeScheduler:
159+
image: registry.k8s.io/kube-scheduler:v1.32.0
160+
leaderElection:
161+
leaderElect: true
162+
logLevel: 2
163+
kubelet:
164+
anonymousAuth: false
165+
cgroupDriver: systemd
166+
cgroupRoot: /
167+
cloudProvider: external
168+
clusterDNS: 100.64.0.10
169+
clusterDomain: cluster.local
170+
enableDebuggingHandlers: true
171+
evictionHard: memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%,imagefs.available<10%,imagefs.inodesFree<5%
172+
hairpinMode: promiscuous-bridge
173+
kubeconfigPath: /var/lib/kubelet/kubeconfig
174+
logLevel: 2
175+
podManifestPath: /etc/kubernetes/manifests
176+
protectKernelDefaults: true
177+
registerSchedulable: true
178+
shutdownGracePeriod: 30s
179+
shutdownGracePeriodCriticalPods: 10s
180+
kubernetesApiAccess:
181+
- 0.0.0.0/0
182+
- ::/0
183+
kubernetesVersion: 1.32.0
184+
masterKubelet:
185+
anonymousAuth: false
186+
cgroupDriver: systemd
187+
cgroupRoot: /
188+
cloudProvider: external
189+
clusterDNS: 100.64.0.10
190+
clusterDomain: cluster.local
191+
enableDebuggingHandlers: true
192+
evictionHard: memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%,imagefs.available<10%,imagefs.inodesFree<5%
193+
hairpinMode: promiscuous-bridge
194+
kubeconfigPath: /var/lib/kubelet/kubeconfig
195+
logLevel: 2
196+
podManifestPath: /etc/kubernetes/manifests
197+
protectKernelDefaults: true
198+
registerSchedulable: true
199+
shutdownGracePeriod: 30s
200+
shutdownGracePeriodCriticalPods: 10s
201+
masterPublicName: api.minimal-gce-ilb-cilium-etcd.example.com
202+
networking:
203+
cilium:
204+
agentPrometheusPort: 9090
205+
bpfCTGlobalAnyMax: 262144
206+
bpfCTGlobalTCPMax: 524288
207+
bpfLBAlgorithm: random
208+
bpfLBMaglevTableSize: "16381"
209+
bpfLBMapMax: 65536
210+
bpfNATGlobalMax: 524288
211+
bpfNeighGlobalMax: 524288
212+
bpfPolicyMapMax: 16384
213+
clusterName: default
214+
cniExclusive: true
215+
cpuRequest: 25m
216+
disableCNPStatusUpdates: true
217+
disableMasquerade: false
218+
enableBPFMasquerade: false
219+
enableEndpointHealthChecking: true
220+
enableL7Proxy: true
221+
enableLocalRedirectPolicy: false
222+
enableRemoteNodeIdentity: true
223+
enableUnreachableRoutes: false
224+
etcdManaged: true
225+
gatewayAPI:
226+
enabled: false
227+
hubble:
228+
enabled: false
229+
identityAllocationMode: crd
230+
identityChangeGracePeriod: 5s
231+
ingress:
232+
enabled: false
233+
ipam: kubernetes
234+
memoryRequest: 128Mi
235+
monitorAggregation: medium
236+
sidecarIstioProxyImage: cilium/istio_proxy
237+
toFqdnsDnsRejectResponseCode: refused
238+
tunnel: vxlan
239+
version: v1.18.6
240+
nonMasqueradeCIDR: 100.64.0.0/10
241+
podCIDR: 100.96.0.0/11
242+
project: testproject
243+
secretStore: memfs://tests/minimal-gce-ilb-cilium-etcd.example.com/secrets
244+
serviceClusterIPRange: 100.64.0.0/13
245+
sshAccess:
246+
- 0.0.0.0/0
247+
- ::/0
248+
subnets:
249+
- cidr: 10.0.16.0/20
250+
name: us-test1
251+
region: us-test1
252+
type: Private
253+
topology:
254+
dns:
255+
type: Public
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"memberCount": 1,
3+
"etcdVersion": "3.5.25"
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"memberCount": 1,
3+
"etcdVersion": "3.5.25"
4+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"memberCount": 1,
3+
"etcdVersion": "3.5.25"
4+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
1.34.0-beta.1

0 commit comments

Comments
 (0)