forked from Azure/azure-container-networking
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnetconfig.go
143 lines (122 loc) · 5.15 KB
/
netconfig.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Copyright 2017 Microsoft. All rights reserved.
// MIT License
package cni
import (
"encoding/json"
"strings"
"github.com/Azure/azure-container-networking/network/policy"
cniTypes "github.com/containernetworking/cni/pkg/types"
)
const (
PolicyStr string = "Policy"
)
// KVPair represents a K-V pair of a json object.
type KVPair struct {
Name string `json:"name"`
Value json.RawMessage `json:"value"`
}
type PortMapping struct {
HostPort int `json:"hostPort"`
ContainerPort int `json:"containerPort"`
Protocol string `json:"protocol"`
HostIp string `json:"hostIP,omitempty"`
}
type RuntimeConfig struct {
PortMappings []PortMapping `json:"portMappings,omitempty"`
DNS RuntimeDNSConfig `json:"dns,omitempty"`
}
// https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/dockershim/network/cni/cni.go#L104
type RuntimeDNSConfig struct {
Servers []string `json:"servers,omitempty"`
Searches []string `json:"searches,omitempty"`
Options []string `json:"options,omitempty"`
}
type IPAM struct {
Mode string `json:"mode,omitempty"`
Type string `json:"type"`
Environment string `json:"environment,omitempty"`
AddrSpace string `json:"addressSpace,omitempty"`
Subnet string `json:"subnet,omitempty"`
Address string `json:"ipAddress,omitempty"`
QueryInterval string `json:"queryInterval,omitempty"`
}
// NetworkConfig represents Azure CNI plugin network configuration.
type NetworkConfig struct {
CNIVersion string `json:"cniVersion,omitempty"`
Name string `json:"name,omitempty"`
Type string `json:"type,omitempty"`
Mode string `json:"mode,omitempty"`
Master string `json:"master,omitempty"`
AdapterName string `json:"adapterName,omitempty"`
Bridge string `json:"bridge,omitempty"`
LogLevel string `json:"logLevel,omitempty"`
LogTarget string `json:"logTarget,omitempty"`
InfraVnetAddressSpace string `json:"infraVnetAddressSpace,omitempty"`
IPV6Mode string `json:"ipv6Mode,omitempty"`
ServiceCidrs string `json:"serviceCidrs,omitempty"`
VnetCidrs string `json:"vnetCidrs,omitempty"`
PodNamespaceForDualNetwork []string `json:"podNamespaceForDualNetwork,omitempty"`
IPsToRouteViaHost []string `json:"ipsToRouteViaHost,omitempty"`
MultiTenancy bool `json:"multiTenancy,omitempty"`
EnableSnatOnHost bool `json:"enableSnatOnHost,omitempty"`
EnableExactMatchForPodName bool `json:"enableExactMatchForPodName,omitempty"`
DisableHairpinOnHostInterface bool `json:"disableHairpinOnHostInterface,omitempty"`
DisableIPTableLock bool `json:"disableIPTableLock,omitempty"`
CNSUrl string `json:"cnsurl,omitempty"`
ExecutionMode string `json:"executionMode,omitempty"`
IPAM IPAM `json:"ipam,omitempty"`
DNS cniTypes.DNS `json:"dns,omitempty"`
RuntimeConfig RuntimeConfig `json:"runtimeConfig,omitempty"`
WindowsSettings WindowsSettings `json:"windowsSettings,omitempty"`
AdditionalArgs []KVPair `json:"AdditionalArgs,omitempty"`
}
type WindowsSettings struct {
EnableLoopbackDSR bool `json:"enableLoopbackDSR,omitempty"`
HnsTimeoutDurationInSeconds int `json:"hnsTimeoutDurationInSeconds,omitempty"`
}
type K8SPodEnvArgs struct {
cniTypes.CommonArgs
K8S_POD_NAMESPACE cniTypes.UnmarshallableString `json:"K8S_POD_NAMESPACE,omitempty"`
K8S_POD_NAME cniTypes.UnmarshallableString `json:"K8S_POD_NAME,omitempty"`
K8S_POD_INFRA_CONTAINER_ID cniTypes.UnmarshallableString `json:"K8S_POD_INFRA_CONTAINER_ID,omitempty"`
}
// ParseCniArgs unmarshals cni arguments.
func ParseCniArgs(args string) (*K8SPodEnvArgs, error) {
podCfg := K8SPodEnvArgs{}
err := cniTypes.LoadArgs(args, &podCfg)
if err != nil {
return nil, err
}
return &podCfg, nil
}
// ParseNetworkConfig unmarshals network configuration from bytes.
func ParseNetworkConfig(b []byte) (*NetworkConfig, error) {
nwCfg := NetworkConfig{}
err := json.Unmarshal(b, &nwCfg)
if err != nil {
return nil, err
}
if nwCfg.CNIVersion == "" {
nwCfg.CNIVersion = defaultVersion
}
return &nwCfg, nil
}
// GetPoliciesFromNwCfg returns network policies from network config.
func GetPoliciesFromNwCfg(kvp []KVPair) []policy.Policy {
var policies []policy.Policy
for _, pair := range kvp {
if strings.Contains(pair.Name, PolicyStr) {
policy := policy.Policy{
Type: policy.CNIPolicyType(pair.Name),
Data: pair.Value,
}
policies = append(policies, policy)
}
}
return policies
}
// Serialize marshals a network configuration to bytes.
func (nwcfg *NetworkConfig) Serialize() []byte {
bytes, _ := json.Marshal(nwcfg)
return bytes
}