Fix #I4KI81 reason: modify kata-containers version and update it to 1.11.1 Signed-off-by: holyfei <yangfeiyu20092010@163.com>
286 lines
11 KiB
Diff
286 lines
11 KiB
Diff
From eeca1e47e9a6422d89d08275864f2c1b15e54941 Mon Sep 17 00:00:00 2001
|
|
From: jiangpengfei <jiangpengfei9@huawei.com>
|
|
Date: Fri, 14 Aug 2020 19:14:35 +0800
|
|
Subject: [PATCH 26/50] network: add enable_compat_old_cni config
|
|
|
|
reason: old version kata-network list-ifaces output result different
|
|
from the community version, inorder to compatible with the old version
|
|
list-ifaces command output format, add enable_compat_old_cni to control
|
|
the list-ifaces command output format.
|
|
|
|
Signed-off-by: jiangpengfei <jiangpengfei9@huawei.com>
|
|
---
|
|
cli/config/configuration-qemu.toml.in | 4 ++++
|
|
cli/network.go | 17 +++++++++++++++--
|
|
cli/network_test.go | 6 ++++++
|
|
pkg/katautils/config.go | 2 ++
|
|
virtcontainers/api.go | 10 +++++++---
|
|
virtcontainers/interfaces.go | 1 +
|
|
virtcontainers/network.go | 11 ++++++-----
|
|
virtcontainers/persist.go | 18 ++++++++++--------
|
|
virtcontainers/persist/api/config.go | 9 +++++----
|
|
virtcontainers/pkg/oci/utils.go | 4 ++++
|
|
virtcontainers/pkg/vcmock/sandbox.go | 5 +++++
|
|
virtcontainers/sandbox.go | 5 +++++
|
|
12 files changed, 70 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/cli/config/configuration-qemu.toml.in b/cli/config/configuration-qemu.toml.in
|
|
index b44e84d8..46f8b632 100644
|
|
--- a/cli/config/configuration-qemu.toml.in
|
|
+++ b/cli/config/configuration-qemu.toml.in
|
|
@@ -453,6 +453,10 @@ disable_guest_seccomp=@DEFDISABLEGUESTSECCOMP@
|
|
# (default: false)
|
|
#disable_new_netns = true
|
|
|
|
+# If enabled, the kata-network will return the old interface format info to be compatible with
|
|
+# old version CNI plugin
|
|
+enable_compat_old_cni = true
|
|
+
|
|
# if enabled, the runtime will add all the kata processes inside one dedicated cgroup.
|
|
# The container cgroups in the host are not created, just one single cgroup per sandbox.
|
|
# The runtime caller is free to restrict or collect cgroup stats of the overall Kata sandbox.
|
|
diff --git a/cli/network.go b/cli/network.go
|
|
index 66955725..a1a24425 100644
|
|
--- a/cli/network.go
|
|
+++ b/cli/network.go
|
|
@@ -251,8 +251,21 @@ func networkListCommand(ctx context.Context, containerID string, opType networkT
|
|
kataLog.WithField("existing-interfaces", fmt.Sprintf("%+v", interfaces)).
|
|
WithError(err).Error("list interfaces failed")
|
|
}
|
|
- compatInfs := convertCompatInterfaces(interfaces)
|
|
- json.NewEncoder(file).Encode(compatInfs)
|
|
+
|
|
+ sandbox, err := vci.FetchSandbox(ctx, sandboxID)
|
|
+ if err != nil {
|
|
+ kataLog.WithField("existing-interfaces", fmt.Sprintf("%+v", interfaces)).
|
|
+ WithError(err).Error("fetch sandbox failed")
|
|
+ }
|
|
+
|
|
+ // If sandbox network config need to be compatible with old CNI,
|
|
+ // convert the interface format to old version format.
|
|
+ if sandbox.IsCompatOldCNI() {
|
|
+ compatInfs := convertCompatInterfaces(interfaces)
|
|
+ json.NewEncoder(file).Encode(compatInfs)
|
|
+ } else {
|
|
+ json.NewEncoder(file).Encode(interfaces)
|
|
+ }
|
|
case routeType:
|
|
var routes []*vcTypes.Route
|
|
routes, err = vci.ListRoutes(ctx, sandboxID)
|
|
diff --git a/cli/network_test.go b/cli/network_test.go
|
|
index 4e3d943d..95fd2749 100644
|
|
--- a/cli/network_test.go
|
|
+++ b/cli/network_test.go
|
|
@@ -17,6 +17,7 @@ import (
|
|
|
|
vc "github.com/kata-containers/runtime/virtcontainers"
|
|
vcTypes "github.com/kata-containers/runtime/virtcontainers/pkg/types"
|
|
+ "github.com/kata-containers/runtime/virtcontainers/pkg/vcmock"
|
|
"github.com/kata-containers/runtime/virtcontainers/types"
|
|
)
|
|
|
|
@@ -59,6 +60,10 @@ func TestNetworkCliFunction(t *testing.T) {
|
|
return newSingleContainerStatus(testContainerID, state, map[string]string{}, &specs.Spec{}), nil
|
|
}
|
|
|
|
+ testingImpl.FetchSandboxFunc = func(ctx context.Context, id string) (vc.VCSandbox, error) {
|
|
+ return &vcmock.Sandbox{}, nil
|
|
+ }
|
|
+
|
|
defer func() {
|
|
testingImpl.AddInterfaceFunc = nil
|
|
testingImpl.RemoveInterfaceFunc = nil
|
|
@@ -66,6 +71,7 @@ func TestNetworkCliFunction(t *testing.T) {
|
|
testingImpl.UpdateRoutesFunc = nil
|
|
testingImpl.ListRoutesFunc = nil
|
|
testingImpl.StatusContainerFunc = nil
|
|
+ testingImpl.FetchSandboxFunc = nil
|
|
}()
|
|
|
|
set := flag.NewFlagSet("", 0)
|
|
diff --git a/pkg/katautils/config.go b/pkg/katautils/config.go
|
|
index 9a99b9d4..94c916a0 100644
|
|
--- a/pkg/katautils/config.go
|
|
+++ b/pkg/katautils/config.go
|
|
@@ -141,6 +141,7 @@ type runtime struct {
|
|
Debug bool `toml:"enable_debug"`
|
|
Tracing bool `toml:"enable_tracing"`
|
|
DisableNewNetNs bool `toml:"disable_new_netns"`
|
|
+ EnableCompatOldCNI bool `toml:"enable_compat_old_cni"`
|
|
DisableGuestSeccomp bool `toml:"disable_guest_seccomp"`
|
|
SandboxCgroupOnly bool `toml:"sandbox_cgroup_only"`
|
|
Experimental []string `toml:"experimental"`
|
|
@@ -1235,6 +1236,7 @@ func LoadConfiguration(configPath string, ignoreLogging, builtIn bool, debugFlag
|
|
|
|
config.SandboxCgroupOnly = tomlConf.Runtime.SandboxCgroupOnly
|
|
config.DisableNewNetNs = tomlConf.Runtime.DisableNewNetNs
|
|
+ config.EnableCompatOldCNI = tomlConf.Runtime.EnableCompatOldCNI
|
|
for _, f := range tomlConf.Runtime.Experimental {
|
|
feature := exp.Get(f)
|
|
if feature == nil {
|
|
diff --git a/virtcontainers/api.go b/virtcontainers/api.go
|
|
index eb5b4995..fb044fe1 100644
|
|
--- a/virtcontainers/api.go
|
|
+++ b/virtcontainers/api.go
|
|
@@ -949,9 +949,13 @@ func ListInterfaces(ctx context.Context, sandboxID string) ([]*vcTypes.Interface
|
|
}
|
|
defer s.releaseStatelessSandbox()
|
|
|
|
- // get interfaces info from persist.json file
|
|
- // instead of by s.ListInterfaces()
|
|
- return convertToCompatInterfaces(&s.networkNS.Endpoints), nil
|
|
+ // If enable_compat_old_cni is enabled, get interfaces info from
|
|
+ // persist.json file instead of by s.ListInterfaces()
|
|
+ if s.config.NetworkConfig.EnableCompatOldCNI {
|
|
+ return convertToCompatInterfaces(&s.networkNS.Endpoints), nil
|
|
+ }
|
|
+
|
|
+ return s.ListInterfaces()
|
|
}
|
|
|
|
// UpdateRoutes is the virtcontainers update routes entry point.
|
|
diff --git a/virtcontainers/interfaces.go b/virtcontainers/interfaces.go
|
|
index fa6b584e..499b386e 100644
|
|
--- a/virtcontainers/interfaces.go
|
|
+++ b/virtcontainers/interfaces.go
|
|
@@ -98,6 +98,7 @@ type VCSandbox interface {
|
|
ListInterfaces() ([]*vcTypes.Interface, error)
|
|
UpdateRoutes(routes []*vcTypes.Route) ([]*vcTypes.Route, error)
|
|
ListRoutes() ([]*vcTypes.Route, error)
|
|
+ IsCompatOldCNI() bool
|
|
}
|
|
|
|
// VCContainer is the Container interface
|
|
diff --git a/virtcontainers/network.go b/virtcontainers/network.go
|
|
index bf7f9336..db235cf6 100644
|
|
--- a/virtcontainers/network.go
|
|
+++ b/virtcontainers/network.go
|
|
@@ -155,11 +155,12 @@ type NetworkInterfacePair struct {
|
|
|
|
// NetworkConfig is the network configuration related to a network.
|
|
type NetworkConfig struct {
|
|
- NetNSPath string
|
|
- NetNsCreated bool
|
|
- DisableNewNetNs bool
|
|
- NetmonConfig NetmonConfig
|
|
- InterworkingModel NetInterworkingModel
|
|
+ NetNSPath string
|
|
+ NetNsCreated bool
|
|
+ DisableNewNetNs bool
|
|
+ EnableCompatOldCNI bool
|
|
+ NetmonConfig NetmonConfig
|
|
+ InterworkingModel NetInterworkingModel
|
|
}
|
|
|
|
func networkLogger() *logrus.Entry {
|
|
diff --git a/virtcontainers/persist.go b/virtcontainers/persist.go
|
|
index 6bd09a0b..fe00bf9a 100644
|
|
--- a/virtcontainers/persist.go
|
|
+++ b/virtcontainers/persist.go
|
|
@@ -187,10 +187,11 @@ func (s *Sandbox) dumpConfig(ss *persistapi.SandboxState) {
|
|
},
|
|
ShimType: string(sconfig.ShimType),
|
|
NetworkConfig: persistapi.NetworkConfig{
|
|
- NetNSPath: sconfig.NetworkConfig.NetNSPath,
|
|
- NetNsCreated: sconfig.NetworkConfig.NetNsCreated,
|
|
- DisableNewNetNs: sconfig.NetworkConfig.DisableNewNetNs,
|
|
- InterworkingModel: int(sconfig.NetworkConfig.InterworkingModel),
|
|
+ NetNSPath: sconfig.NetworkConfig.NetNSPath,
|
|
+ NetNsCreated: sconfig.NetworkConfig.NetNsCreated,
|
|
+ DisableNewNetNs: sconfig.NetworkConfig.DisableNewNetNs,
|
|
+ EnableCompatOldCNI: sconfig.NetworkConfig.EnableCompatOldCNI,
|
|
+ InterworkingModel: int(sconfig.NetworkConfig.InterworkingModel),
|
|
},
|
|
|
|
ShmSize: sconfig.ShmSize,
|
|
@@ -477,10 +478,11 @@ func loadSandboxConfig(id string) (*SandboxConfig, error) {
|
|
},
|
|
ShimType: ShimType(savedConf.ShimType),
|
|
NetworkConfig: NetworkConfig{
|
|
- NetNSPath: savedConf.NetworkConfig.NetNSPath,
|
|
- NetNsCreated: savedConf.NetworkConfig.NetNsCreated,
|
|
- DisableNewNetNs: savedConf.NetworkConfig.DisableNewNetNs,
|
|
- InterworkingModel: NetInterworkingModel(savedConf.NetworkConfig.InterworkingModel),
|
|
+ NetNSPath: savedConf.NetworkConfig.NetNSPath,
|
|
+ NetNsCreated: savedConf.NetworkConfig.NetNsCreated,
|
|
+ DisableNewNetNs: savedConf.NetworkConfig.DisableNewNetNs,
|
|
+ EnableCompatOldCNI: savedConf.NetworkConfig.EnableCompatOldCNI,
|
|
+ InterworkingModel: NetInterworkingModel(savedConf.NetworkConfig.InterworkingModel),
|
|
},
|
|
|
|
ShmSize: savedConf.ShmSize,
|
|
diff --git a/virtcontainers/persist/api/config.go b/virtcontainers/persist/api/config.go
|
|
index cfbee849..3a2df32b 100644
|
|
--- a/virtcontainers/persist/api/config.go
|
|
+++ b/virtcontainers/persist/api/config.go
|
|
@@ -210,10 +210,11 @@ type ShimConfig struct {
|
|
|
|
// NetworkConfig is the network configuration related to a network.
|
|
type NetworkConfig struct {
|
|
- NetNSPath string
|
|
- NetNsCreated bool
|
|
- DisableNewNetNs bool
|
|
- InterworkingModel int
|
|
+ NetNSPath string
|
|
+ NetNsCreated bool
|
|
+ DisableNewNetNs bool
|
|
+ EnableCompatOldCNI bool
|
|
+ InterworkingModel int
|
|
}
|
|
|
|
type ContainerConfig struct {
|
|
diff --git a/virtcontainers/pkg/oci/utils.go b/virtcontainers/pkg/oci/utils.go
|
|
index 36c730b7..948bd3cb 100644
|
|
--- a/virtcontainers/pkg/oci/utils.go
|
|
+++ b/virtcontainers/pkg/oci/utils.go
|
|
@@ -130,6 +130,9 @@ type RuntimeConfig struct {
|
|
//Determines if create a netns for hypervisor process
|
|
DisableNewNetNs bool
|
|
|
|
+ // Determines if compatible with old CNI plugin
|
|
+ EnableCompatOldCNI bool
|
|
+
|
|
//Determines kata processes are managed only in sandbox cgroup
|
|
SandboxCgroupOnly bool
|
|
|
|
@@ -275,6 +278,7 @@ func networkConfig(ocispec specs.Spec, config RuntimeConfig) (vc.NetworkConfig,
|
|
}
|
|
netConf.InterworkingModel = config.InterNetworkModel
|
|
netConf.DisableNewNetNs = config.DisableNewNetNs
|
|
+ netConf.EnableCompatOldCNI = config.EnableCompatOldCNI
|
|
|
|
netConf.NetmonConfig = vc.NetmonConfig{
|
|
Path: config.NetmonConfig.Path,
|
|
diff --git a/virtcontainers/pkg/vcmock/sandbox.go b/virtcontainers/pkg/vcmock/sandbox.go
|
|
index 677457ef..11b83ccd 100644
|
|
--- a/virtcontainers/pkg/vcmock/sandbox.go
|
|
+++ b/virtcontainers/pkg/vcmock/sandbox.go
|
|
@@ -212,3 +212,8 @@ func (s *Sandbox) UpdateRoutes(routes []*vcTypes.Route) ([]*vcTypes.Route, error
|
|
func (s *Sandbox) ListRoutes() ([]*vcTypes.Route, error) {
|
|
return nil, nil
|
|
}
|
|
+
|
|
+// IsCompatOldCNI return the whether enable compatible with old CNI
|
|
+func (s *Sandbox) IsCompatOldCNI() bool {
|
|
+ return false
|
|
+}
|
|
diff --git a/virtcontainers/sandbox.go b/virtcontainers/sandbox.go
|
|
index c8981a41..6a643a12 100644
|
|
--- a/virtcontainers/sandbox.go
|
|
+++ b/virtcontainers/sandbox.go
|
|
@@ -2379,6 +2379,11 @@ func (s *Sandbox) setContainersState(state types.StateString) error {
|
|
return nil
|
|
}
|
|
|
|
+// IsCompatOldCNI return the whether enable compatible with old CNI
|
|
+func (s *Sandbox) IsCompatOldCNI() bool {
|
|
+ return s.config.NetworkConfig.EnableCompatOldCNI
|
|
+}
|
|
+
|
|
// updateStaticSandboxResources update sandbox's cpu and memory resource passed by
|
|
// sandbox_cpu and sandbox_mem annotations
|
|
func updateStaticSandboxResources(sandboxConfig *SandboxConfig) error {
|
|
--
|
|
2.14.3 (Apple Git-98)
|
|
|