Skip to content

Commit 1a1f1d1

Browse files
committed
feat: CNS generates chained cni conflist with cilium
1 parent 73f6733 commit 1a1f1d1

File tree

7 files changed

+149
-5
lines changed

7 files changed

+149
-5
lines changed

cns/cniconflist/generator.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ type SWIFTGenerator struct {
7171
Writer io.WriteCloser
7272
}
7373

74+
type AzureCNIChainedCiliumGenerator struct {
75+
Writer io.WriteCloser
76+
}
77+
7478
func (v *V4OverlayGenerator) Close() error {
7579
if err := v.Writer.Close(); err != nil {
7680
return errors.Wrap(err, "error closing generator")
@@ -110,3 +114,11 @@ func (v *SWIFTGenerator) Close() error {
110114

111115
return nil
112116
}
117+
118+
func (v *AzureCNIChainedCiliumGenerator) Close() error {
119+
if err := v.Writer.Close(); err != nil {
120+
return errors.Wrap(err, "error closing generator")
121+
}
122+
123+
return nil
124+
}

cns/cniconflist/generator_linux.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,3 +161,33 @@ func (v *SWIFTGenerator) Generate() error {
161161

162162
return nil
163163
}
164+
165+
func (v *AzureCNIChainedCiliumGenerator) Generate() error {
166+
conflist := cniConflist{
167+
CNIVersion: azurecniVersion,
168+
Name: azureName,
169+
Plugins: []any{
170+
cni.NetworkConfig{
171+
Type: azureType,
172+
Mode: cninet.OpModeTransparent,
173+
IPsToRouteViaHost: []string{nodeLocalDNSIP},
174+
ExecutionMode: string(util.V4Swift),
175+
IPAM: cni.IPAM{
176+
Type: network.AzureCNS,
177+
},
178+
},
179+
cni.NetworkConfig{
180+
Name: ciliumcniName,
181+
Type: ciliumcniType,
182+
},
183+
},
184+
}
185+
186+
enc := json.NewEncoder(v.Writer)
187+
enc.SetIndent("", "\t")
188+
if err := enc.Encode(conflist); err != nil {
189+
return errors.Wrap(err, "error encoding conflist to json")
190+
}
191+
192+
return nil
193+
}

cns/cniconflist/generator_linux_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,21 @@ func TestGenerateSWIFTConflist(t *testing.T) {
9292
assert.Equal(t, removeNewLines(fixtureBytes), removeNewLines(buffer.Bytes()))
9393
}
9494

95+
func TestGenerateAzurecniCiliumConflist(t *testing.T) {
96+
fixture := "testdata/fixtures/azure-chained-cilium.conflist"
97+
98+
buffer := new(bytes.Buffer)
99+
g := cniconflist.AzureCNIChainedCiliumGenerator{Writer: &bufferWriteCloser{buffer}}
100+
err := g.Generate()
101+
assert.NoError(t, err)
102+
103+
fixtureBytes, err := os.ReadFile(fixture)
104+
assert.NoError(t, err)
105+
106+
// remove newlines and carriage returns in case these UTs are running on Windows
107+
assert.Equal(t, removeNewLines(fixtureBytes), removeNewLines(buffer.Bytes()))
108+
}
109+
95110
// removeNewLines will remove the newlines and carriage returns from the byte slice
96111
func removeNewLines(b []byte) []byte {
97112
var bb []byte //nolint:prealloc // can't prealloc since we don't know how many bytes will get removed

cns/cniconflist/generator_windows.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,7 @@ func (v *CiliumGenerator) Generate() error {
2525
func (v *SWIFTGenerator) Generate() error {
2626
return errNotImplemented
2727
}
28+
29+
func (v *AzureCNIChainedCiliumGenerator) Generate() error {
30+
return errNotImplemented
31+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"cniVersion": "0.3.0",
3+
"name": "azure",
4+
"plugins": [
5+
{
6+
"type": "azure-vnet",
7+
"mode": "transparent",
8+
"ipsToRouteViaHost": [
9+
"169.254.20.10"
10+
],
11+
"executionMode": "v4swift",
12+
"ipam": {
13+
"type": "azure-cns"
14+
},
15+
"dns": {},
16+
"runtimeConfig": {
17+
"dns": {}
18+
},
19+
"windowsSettings": {}
20+
},
21+
{
22+
"name": "cilium",
23+
"type": "cilium-cni",
24+
"ipam": {
25+
"type": ""
26+
},
27+
"dns": {},
28+
"runtimeConfig": {
29+
"dns": {}
30+
},
31+
"windowsSettings": {}
32+
}
33+
]
34+
}

cns/service/main.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,12 @@ const (
121121
type cniConflistScenario string
122122

123123
const (
124-
scenarioV4Overlay cniConflistScenario = "v4overlay"
125-
scenarioDualStackOverlay cniConflistScenario = "dualStackOverlay"
126-
scenarioOverlay cniConflistScenario = "overlay"
127-
scenarioCilium cniConflistScenario = "cilium"
128-
scenarioSWIFT cniConflistScenario = "swift"
124+
scenarioV4Overlay cniConflistScenario = "v4overlay"
125+
scenarioDualStackOverlay cniConflistScenario = "dualStackOverlay"
126+
scenarioOverlay cniConflistScenario = "overlay"
127+
scenarioCilium cniConflistScenario = "cilium"
128+
scenarioSWIFT cniConflistScenario = "swift"
129+
scenarioAzurecniChainedCilium cniConflistScenario = "azurecni-chained-cilium"
129130
)
130131

131132
var (
@@ -623,6 +624,8 @@ func main() {
623624
conflistGenerator = &cniconflist.CiliumGenerator{Writer: writer}
624625
case scenarioSWIFT:
625626
conflistGenerator = &cniconflist.SWIFTGenerator{Writer: writer}
627+
case scenarioAzurecniChainedCilium:
628+
conflistGenerator = &cniconflist.AzureCNIChainedCiliumGenerator{Writer: writer}
626629
default:
627630
logger.Errorf("unable to generate cni conflist for unknown scenario: %s", scenario)
628631
os.Exit(1)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: cns-config
5+
namespace: kube-system
6+
data:
7+
cns_config.json: |
8+
{
9+
"CNIConflistFilepath": "/etc/cni/net.d/05-azure-chained-cilium.conflist",
10+
"CNIConflistScenario": "azurecni-chained-cilium",
11+
"ChannelMode": "CRD",
12+
"EnableAsyncPodDelete": true,
13+
"EnableCNIConflistGeneration": true,
14+
"EnableIPAMv2": true,
15+
"EnableK8sDevicePlugin": true,
16+
"EnableLoggerV2": true,
17+
"EnableStateMigration": true,
18+
"EnableSubnetScarcity": false,
19+
"InitializeFromCNI": false,
20+
"Logger": {
21+
"file": {
22+
"filepath": "/var/log/azure-cns/azure-cns.log",
23+
"level": "info",
24+
"maxBackups": 5,
25+
"maxSize": 5
26+
}
27+
},
28+
"ManageEndpointState": true,
29+
"ManagedSettings": {
30+
"InfrastructureNetworkID": "",
31+
"NodeID": "",
32+
"NodeSyncIntervalInSeconds": 30,
33+
"PrivateEndpoint": ""
34+
},
35+
"MetricsBindAddress": ":10092",
36+
"ProgramSNATIPTables": false,
37+
"TelemetrySettings": {
38+
"DebugMode": false,
39+
"DisableAll": false,
40+
"HeartBeatIntervalInMins": 30,
41+
"RefreshIntervalInSecs": 15,
42+
"SnapshotIntervalInMins": 60,
43+
"TelemetryBatchIntervalInSecs": 15,
44+
"TelemetryBatchSizeBytes": 16384
45+
}
46+
}

0 commit comments

Comments
 (0)