mirror of
https://github.com/kemko/nomad.git
synced 2026-01-03 17:05:43 +03:00
When `transparent_proxy` block is present and the network mode is `bridge`, use a different CNI configuration that includes the `consul-cni` plugin. Before invoking the CNI plugins, create a Consul SDK `iptables.Config` struct for the allocation. This includes: * Use all the `transparent_proxy` block fields * The reserved ports are added to the inbound exclusion list so the alloc is reachable from outside the mesh * The `expose` blocks and `check` blocks with `expose=true` are added to the inbound exclusion list so health checks work. The `iptables.Config` is then passed as a CNI argument to the `consul-cni` plugin. Ref: https://github.com/hashicorp/nomad/issues/10628
67 lines
1.4 KiB
Go
67 lines
1.4 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package allocrunner
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/nomad/ci"
|
|
"github.com/shoenig/test/must"
|
|
)
|
|
|
|
func Test_buildNomadBridgeNetConfig(t *testing.T) {
|
|
ci.Parallel(t)
|
|
testCases := []struct {
|
|
name string
|
|
withConsulCNI bool
|
|
b *bridgeNetworkConfigurator
|
|
}{
|
|
{
|
|
name: "empty",
|
|
b: &bridgeNetworkConfigurator{},
|
|
},
|
|
|
|
{
|
|
name: "hairpin",
|
|
b: &bridgeNetworkConfigurator{
|
|
bridgeName: defaultNomadBridgeName,
|
|
allocSubnet: defaultNomadAllocSubnet,
|
|
hairpinMode: true,
|
|
},
|
|
},
|
|
{
|
|
name: "bad_input",
|
|
b: &bridgeNetworkConfigurator{
|
|
bridgeName: `bad"`,
|
|
allocSubnet: defaultNomadAllocSubnet,
|
|
hairpinMode: true,
|
|
},
|
|
},
|
|
{
|
|
name: "consul-cni",
|
|
withConsulCNI: true,
|
|
b: &bridgeNetworkConfigurator{
|
|
bridgeName: defaultNomadBridgeName,
|
|
allocSubnet: defaultNomadAllocSubnet,
|
|
hairpinMode: true,
|
|
},
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
tc := tc
|
|
ci.Parallel(t)
|
|
bCfg := buildNomadBridgeNetConfig(*tc.b, tc.withConsulCNI)
|
|
// Validate that the JSON created is rational
|
|
must.True(t, json.Valid(bCfg))
|
|
if tc.withConsulCNI {
|
|
must.StrContains(t, string(bCfg), "consul-cni")
|
|
} else {
|
|
must.StrNotContains(t, string(bCfg), "consul-cni")
|
|
}
|
|
})
|
|
}
|
|
}
|