Skip to content

Commit

Permalink
Run cAdvisor on the same interface as kubelet
Browse files Browse the repository at this point in the history
cAdvisor currently binds to all interfaces. Currently the only
solution is to use iptables to block access to the port. We
are better off making cAdvisor to bind to the interface that
kubelet uses for better security.

Fixes kubernetes#11710
  • Loading branch information
dims committed Jun 8, 2017
1 parent 038d194 commit 7e5c43a
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 8 deletions.
2 changes: 1 addition & 1 deletion cmd/kubelet/app/server.go
Expand Up @@ -522,7 +522,7 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.KubeletDeps) (err error) {
}

if kubeDeps.CAdvisorInterface == nil {
kubeDeps.CAdvisorInterface, err = cadvisor.New(uint(s.CAdvisorPort), s.ContainerRuntime, s.RootDirectory)
kubeDeps.CAdvisorInterface, err = cadvisor.New(s.Address, uint(s.CAdvisorPort), s.ContainerRuntime, s.RootDirectory)
if err != nil {
return err
}
Expand Down
10 changes: 6 additions & 4 deletions pkg/kubelet/cadvisor/cadvisor_linux.go
Expand Up @@ -21,7 +21,9 @@ package cadvisor
import (
"flag"
"fmt"
"net"
"net/http"
"strconv"
"time"

"github.com/golang/glog"
Expand Down Expand Up @@ -94,7 +96,7 @@ func containerLabels(c *cadvisorapi.ContainerInfo) map[string]string {
}

// New creates a cAdvisor and exports its API on the specified port if port > 0.
func New(port uint, runtime string, rootPath string) (Interface, error) {
func New(address string, port uint, runtime string, rootPath string) (Interface, error) {
sysFs := sysfs.NewRealSysFs()

// Create and start the cAdvisor container manager.
Expand All @@ -109,7 +111,7 @@ func New(port uint, runtime string, rootPath string) (Interface, error) {
Manager: m,
}

err = cadvisorClient.exportHTTP(port)
err = cadvisorClient.exportHTTP(address, port)
if err != nil {
return nil, err
}
Expand All @@ -120,7 +122,7 @@ func (cc *cadvisorClient) Start() error {
return cc.Manager.Start()
}

func (cc *cadvisorClient) exportHTTP(port uint) error {
func (cc *cadvisorClient) exportHTTP(address string, port uint) error {
// Register the handlers regardless as this registers the prometheus
// collector properly.
mux := http.NewServeMux()
Expand All @@ -134,7 +136,7 @@ func (cc *cadvisorClient) exportHTTP(port uint) error {
// Only start the http server if port > 0
if port > 0 {
serv := &http.Server{
Addr: fmt.Sprintf(":%d", port),
Addr: net.JoinHostPort(address, strconv.Itoa(int(port))),
Handler: mux,
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/kubelet/cadvisor/cadvisor_unsupported.go
Expand Up @@ -31,7 +31,7 @@ type cadvisorUnsupported struct {

var _ Interface = new(cadvisorUnsupported)

func New(port uint, runtime string, rootPath string) (Interface, error) {
func New(address string, port uint, runtime string, rootPath string) (Interface, error) {
return &cadvisorUnsupported{}, nil
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/kubelet/cadvisor/cadvisor_windows.go
Expand Up @@ -30,7 +30,7 @@ type cadvisorClient struct {
var _ Interface = new(cadvisorClient)

// New creates a cAdvisor and exports its API on the specified port if port > 0.
func New(port uint, runtime string, rootPath string) (Interface, error) {
func New(address string, port uint, runtime string, rootPath string) (Interface, error) {
return &cadvisorClient{}, nil
}

Expand Down
2 changes: 1 addition & 1 deletion test/e2e_node/environment/conformance.go
Expand Up @@ -99,7 +99,7 @@ func containerRuntime() error {
}

// Setup cadvisor to check the container environment
c, err := cadvisor.New(0 /*don't start the http server*/, "docker", "/var/lib/kubelet")
c, err := cadvisor.New("", 0 /*don't start the http server*/, "docker", "/var/lib/kubelet")
if err != nil {
return printError("Container Runtime Check: %s Could not start cadvisor %v", failed, err)
}
Expand Down

0 comments on commit 7e5c43a

Please sign in to comment.