diff --git a/docs/man/man1/kubectl-proxy.1 b/docs/man/man1/kubectl-proxy.1 index a8ff3050848..4934970e8e6 100644 --- a/docs/man/man1/kubectl-proxy.1 +++ b/docs/man/man1/kubectl-proxy.1 @@ -51,7 +51,7 @@ The above lets you 'curl localhost:8001/custom/api/v1/pods' The IP address on which to serve on. .PP -\fB\-\-api\-prefix\fP="/api/" +\fB\-\-api\-prefix\fP="/" Prefix to serve the proxied API under. .PP diff --git a/docs/user-guide/kubectl/kubectl_proxy.md b/docs/user-guide/kubectl/kubectl_proxy.md index eb24547fb55..19e3a5f59d3 100644 --- a/docs/user-guide/kubectl/kubectl_proxy.md +++ b/docs/user-guide/kubectl/kubectl_proxy.md @@ -80,7 +80,7 @@ $ kubectl proxy --api-prefix=/k8s-api --accept-hosts="^localhost$,^127\\.0\\.0\\.1$,^\\[::1\\]$": Regular expression for hosts that the proxy should accept. --accept-paths="^/.*": Regular expression for paths that the proxy should accept. --address="127.0.0.1": The IP address on which to serve on. - --api-prefix="/api/": Prefix to serve the proxied API under. + --api-prefix="/": Prefix to serve the proxied API under. --disable-filter[=false]: If true, disable request filtering in the proxy. This is dangerous, and can leave you vulnerable to XSRF attacks, when used with an accessible port. -p, --port=8001: The port on which to run the proxy. Set to 0 to pick a random port. --reject-methods="POST,PUT,PATCH": Regular expression for HTTP methods that the proxy should reject. diff --git a/hack/test-cmd.sh b/hack/test-cmd.sh index 85586ecea9d..fb440acd01c 100755 --- a/hack/test-cmd.sh +++ b/hack/test-cmd.sh @@ -33,8 +33,7 @@ function stop-proxy() PROXY_PORT= } -# Starts "kubect proxy" to test the client proxy. You may pass options, e.g. -# --api-prefix. +# Starts "kubect proxy" to test the client proxy. $1: api_prefix function start-proxy() { stop-proxy @@ -45,15 +44,21 @@ function start-proxy() PROXY_PORT=$(kube::util::get_random_port) kube::log::status "On try ${retry}, use proxy port ${PROXY_PORT} if it's free" if kube::util::test_host_port_free "127.0.0.1" "${PROXY_PORT}"; then - # the --www and --www-prefix are just to make something definitely show up for - # wait_for_url to see. - kubectl proxy -p ${PROXY_PORT} --www=. --www-prefix=/healthz "$@" 1>&2 & break + if [ $# -eq 0 ]; then + kubectl proxy -p ${PROXY_PORT} --www=. 1>&2 & break + else + kubectl proxy -p ${PROXY_PORT} --www=. --api-prefix="$1" 1>&2 & break + fi fi sleep 1; done PROXY_PID=$! - kube::util::wait_for_url "http://127.0.0.1:${PROXY_PORT}/healthz" "kubectl proxy $@" + if [ $# -eq 0 ]; then + kube::util::wait_for_url "http://127.0.0.1:${PROXY_PORT}/healthz" "kubectl proxy" + else + kube::util::wait_for_url "http://127.0.0.1:${PROXY_PORT}/$1/healthz" "kubectl proxy --api-prefix=$1" + fi } function cleanup() @@ -163,6 +168,7 @@ KUBE_API_VERSIONS="v1,extensions/v1beta1" "${KUBE_OUTPUT_HOSTBIN}/kube-apiserver --kubelet-port=${KUBELET_PORT} \ --runtime-config=api/v1 \ --cert-dir="${TMPDIR:-/tmp/}" \ + --runtime_config="extensions/v1beta1=true" \ --service-cluster-ip-range="10.0.0.0/24" 1>&2 & APISERVER_PID=$! @@ -217,26 +223,24 @@ runTests() { ####################### # Make sure the UI can be proxied - start-proxy --api-prefix=/ + start-proxy check-curl-proxy-code /ui 301 check-curl-proxy-code /metrics 200 - if [[ -n "${version}" ]]; then - check-curl-proxy-code /api/${version}/namespaces 200 - fi - stop-proxy - - # Default proxy locks you into the /api path (legacy behavior) - start-proxy - check-curl-proxy-code /ui 404 - check-curl-proxy-code /metrics 404 check-curl-proxy-code /api/ui 404 if [[ -n "${version}" ]]; then check-curl-proxy-code /api/${version}/namespaces 200 fi + check-curl-proxy-code /static/ 200 + stop-proxy + + # Make sure the in-development api is accessible by default + start-proxy + check-curl-proxy-code /apis 200 + check-curl-proxy-code /apis/extensions/ 200 stop-proxy # Custom paths let you see everything. - start-proxy --api-prefix=/custom + start-proxy /custom check-curl-proxy-code /custom/ui 301 check-curl-proxy-code /custom/metrics 200 if [[ -n "${version}" ]]; then diff --git a/pkg/kubectl/cmd/proxy.go b/pkg/kubectl/cmd/proxy.go index 5ec9114f16d..130e2ae5967 100644 --- a/pkg/kubectl/cmd/proxy.go +++ b/pkg/kubectl/cmd/proxy.go @@ -71,7 +71,7 @@ The above lets you 'curl localhost:8001/custom/api/v1/pods' } cmd.Flags().StringP("www", "w", "", "Also serve static files from the given directory under the specified prefix.") cmd.Flags().StringP("www-prefix", "P", "/static/", "Prefix to serve static files under, if static file directory is specified.") - cmd.Flags().StringP("api-prefix", "", "/api/", "Prefix to serve the proxied API under.") + cmd.Flags().StringP("api-prefix", "", "/", "Prefix to serve the proxied API under.") cmd.Flags().String("accept-paths", kubectl.DefaultPathAcceptRE, "Regular expression for paths that the proxy should accept.") cmd.Flags().String("reject-paths", kubectl.DefaultPathRejectRE, "Regular expression for paths that the proxy should reject.") cmd.Flags().String("accept-hosts", kubectl.DefaultHostAcceptRE, "Regular expression for hosts that the proxy should accept.")