diff --git a/src/runtime/cli/kata-exec.go b/src/runtime/cli/kata-exec.go index d556f782ac..24c6e2f5b6 100644 --- a/src/runtime/cli/kata-exec.go +++ b/src/runtime/cli/kata-exec.go @@ -14,7 +14,6 @@ import ( "net/http" "net/url" "os" - "path/filepath" "strings" "sync" @@ -37,10 +36,8 @@ const ( subCommandName = "exec" // command-line parameters name - paramRuntimeNamespace = "runtime-namespace" paramDebugConsolePort = "kata-debug-port" defaultKernelParamDebugConsoleVPortValue = 1026 - defaultRuntimeNamespace = "k8s.io" ) var ( @@ -56,21 +53,12 @@ var kataExecCLICommand = cli.Command{ Name: subCommandName, Usage: "Enter into guest by debug console", Flags: []cli.Flag{ - cli.StringFlag{ - Name: paramRuntimeNamespace, - Usage: "Namespace that containerd or CRI-O are using for containers. (Default: k8s.io, only works for containerd)", - }, cli.Uint64Flag{ Name: paramDebugConsolePort, Usage: "Port that debug console is listening on. (Default: 1026)", }, }, Action: func(context *cli.Context) error { - namespace := context.String(paramRuntimeNamespace) - if namespace == "" { - namespace = defaultRuntimeNamespace - } - port := context.Uint64(paramDebugConsolePort) if port == 0 { port = defaultKernelParamDebugConsoleVPortValue @@ -82,7 +70,8 @@ var kataExecCLICommand = cli.Command{ return err } - conn, err := getConn(namespace, sandboxID, port) + conn, err := getConn(sandboxID, port) + if err != nil { return err } @@ -165,9 +154,8 @@ func (s *iostream) Read(data []byte) (n int, err error) { return s.conn.Read(data) } -func getConn(namespace, sandboxID string, port uint64) (net.Conn, error) { - socketAddr := filepath.Join(string(filepath.Separator), "containerd-shim", namespace, sandboxID, "shim-monitor.sock") - client, err := kataMonitor.BuildUnixSocketClient(socketAddr, defaultTimeout) +func getConn(sandboxID string, port uint64) (net.Conn, error) { + client, err := kataMonitor.BuildShimClient(sandboxID, defaultTimeout) if err != nil { return nil, err } @@ -178,7 +166,7 @@ func getConn(namespace, sandboxID string, port uint64) (net.Conn, error) { } if resp.StatusCode != http.StatusOK { - return nil, fmt.Errorf("Failed to get %s: %d", socketAddr, resp.StatusCode) + return nil, fmt.Errorf("Failure from %s shim-monitor: %d", sandboxID, resp.StatusCode) } defer resp.Body.Close() diff --git a/src/runtime/containerd-shim-v2/shim_management.go b/src/runtime/containerd-shim-v2/shim_management.go index d7b4bb1cac..ab7ebf2041 100644 --- a/src/runtime/containerd-shim-v2/shim_management.go +++ b/src/runtime/containerd-shim-v2/shim_management.go @@ -16,7 +16,6 @@ import ( "strconv" "strings" - "github.com/containerd/containerd/namespaces" cdshim "github.com/containerd/containerd/runtime/v2/shim" vc "github.com/kata-containers/kata-containers/src/runtime/virtcontainers" vcAnnotations "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/annotations" @@ -129,11 +128,7 @@ func decodeAgentMetrics(body string) []*dto.MetricFamily { func (s *service) startManagementServer(ctx context.Context, ociSpec *specs.Spec) { // metrics socket will under sandbox's bundle path - metricsAddress, err := socketAddress(ctx, s.id) - if err != nil { - shimMgtLog.WithError(err).Error("failed to create socket address") - return - } + metricsAddress := SocketAddress(s.id) listener, err := cdshim.NewSocket(metricsAddress) if err != nil { @@ -188,10 +183,8 @@ func (s *service) mountPprofHandle(m *http.ServeMux, ociSpec *specs.Spec) { m.Handle("/debug/pprof/trace", http.HandlerFunc(pprof.Trace)) } -func socketAddress(ctx context.Context, id string) (string, error) { - ns, err := namespaces.NamespaceRequired(ctx) - if err != nil { - return "", err - } - return filepath.Join(string(filepath.Separator), "containerd-shim", ns, id, "shim-monitor.sock"), nil +// SocketAddress returns the address of the abstract domain socket for communicating with the +// shim management endpoint +func SocketAddress(id string) string { + return filepath.Join(string(filepath.Separator), "run", "vc", id, "shim-monitor") } diff --git a/src/runtime/pkg/kata-monitor/metrics.go b/src/runtime/pkg/kata-monitor/metrics.go index b4fcd5830a..aeb9f72c5d 100644 --- a/src/runtime/pkg/kata-monitor/metrics.go +++ b/src/runtime/pkg/kata-monitor/metrics.go @@ -176,7 +176,7 @@ func (km *KataMonitor) aggregateSandboxMetrics(encoder expfmt.Encoder) error { for sandboxID, namespace := range sandboxes { wg.Add(1) go func(sandboxID, namespace string, results chan<- []*dto.MetricFamily) { - sandboxMetrics, err := km.getSandboxMetrics(sandboxID, namespace) + sandboxMetrics, err := getSandboxMetrics(sandboxID) if err != nil { monitorLog.WithError(err).WithField("sandbox_id", sandboxID).Errorf("failed to get metrics for sandbox") } @@ -234,8 +234,8 @@ func (km *KataMonitor) aggregateSandboxMetrics(encoder expfmt.Encoder) error { } // getSandboxMetrics will get sandbox's metrics from shim -func (km *KataMonitor) getSandboxMetrics(sandboxID, namespace string) ([]*dto.MetricFamily, error) { - body, err := km.doGet(sandboxID, namespace, defaultTimeout, "metrics") +func getSandboxMetrics(sandboxID string) ([]*dto.MetricFamily, error) { + body, err := doGet(sandboxID, defaultTimeout, "metrics") if err != nil { return nil, err } diff --git a/src/runtime/pkg/kata-monitor/monitor.go b/src/runtime/pkg/kata-monitor/monitor.go index 64266fdb7d..1c663a5fdd 100644 --- a/src/runtime/pkg/kata-monitor/monitor.go +++ b/src/runtime/pkg/kata-monitor/monitor.go @@ -87,13 +87,8 @@ func (km *KataMonitor) GetAgentURL(w http.ResponseWriter, r *http.Request) { commonServeError(w, http.StatusBadRequest, err) return } - namespace, err := km.getSandboxNamespace(sandboxID) - if err != nil { - commonServeError(w, http.StatusBadRequest, err) - return - } - data, err := km.doGet(sandboxID, namespace, defaultTimeout, "agent-url") + data, err := doGet(sandboxID, defaultTimeout, "agent-url") if err != nil { commonServeError(w, http.StatusBadRequest, err) return diff --git a/src/runtime/pkg/kata-monitor/shim_client.go b/src/runtime/pkg/kata-monitor/shim_client.go index b2c462e8fa..ef4dc8a330 100644 --- a/src/runtime/pkg/kata-monitor/shim_client.go +++ b/src/runtime/pkg/kata-monitor/shim_client.go @@ -11,6 +11,8 @@ import ( "net" "net/http" "time" + + shim "github.com/kata-containers/kata-containers/src/runtime/containerd-shim-v2" ) const ( @@ -33,16 +35,13 @@ func getSandboxIDFromReq(r *http.Request) (string, error) { return "", fmt.Errorf("sandbox not found in %+v", r.URL.Query()) } -func (km *KataMonitor) buildShimClient(sandboxID, namespace string, timeout time.Duration) (*http.Client, error) { - socketAddr, err := km.getMonitorAddress(sandboxID, namespace) - if err != nil { - return nil, err - } - return BuildUnixSocketClient(socketAddr, timeout) +// BuildShimClient builds and returns an http client for communicating with the provided sandbox +func BuildShimClient(sandboxID string, timeout time.Duration) (*http.Client, error) { + return buildUnixSocketClient(shim.SocketAddress(sandboxID), timeout) } -// BuildUnixSocketClient build http client for Unix socket -func BuildUnixSocketClient(socketAddr string, timeout time.Duration) (*http.Client, error) { +// buildUnixSocketClient build http client for Unix socket +func buildUnixSocketClient(socketAddr string, timeout time.Duration) (*http.Client, error) { transport := &http.Transport{ DisableKeepAlives: true, Dial: func(proto, addr string) (conn net.Conn, err error) { @@ -61,8 +60,8 @@ func BuildUnixSocketClient(socketAddr string, timeout time.Duration) (*http.Clie return client, nil } -func (km *KataMonitor) doGet(sandboxID, namespace string, timeoutInSeconds time.Duration, urlPath string) ([]byte, error) { - client, err := km.buildShimClient(sandboxID, namespace, timeoutInSeconds) +func doGet(sandboxID string, timeoutInSeconds time.Duration, urlPath string) ([]byte, error) { + client, err := BuildShimClient(sandboxID, timeoutInSeconds) if err != nil { return nil, err }