mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 17:30:00 +00:00
Merge pull request #10509 from nikhiljindal/getToPost
Support both GET and POST methods in api server for /exec and /portforward
This commit is contained in:
commit
df753b74ed
@ -5957,6 +5957,36 @@
|
|||||||
"consumes": [
|
"consumes": [
|
||||||
"*/*"
|
"*/*"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"method": "POST",
|
||||||
|
"summary": "connect POST requests to exec of Pod",
|
||||||
|
"nickname": "connectPostPodExec",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"paramType": "path",
|
||||||
|
"name": "namespace",
|
||||||
|
"description": "object name and auth scope, such as for teams and projects",
|
||||||
|
"required": true,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"paramType": "path",
|
||||||
|
"name": "name",
|
||||||
|
"description": "name of the Pod",
|
||||||
|
"required": true,
|
||||||
|
"allowMultiple": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"*/*"
|
||||||
|
],
|
||||||
|
"consumes": [
|
||||||
|
"*/*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -6044,6 +6074,36 @@
|
|||||||
"consumes": [
|
"consumes": [
|
||||||
"*/*"
|
"*/*"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"method": "POST",
|
||||||
|
"summary": "connect POST requests to portforward of Pod",
|
||||||
|
"nickname": "connectPostPodPortforward",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"paramType": "path",
|
||||||
|
"name": "namespace",
|
||||||
|
"description": "object name and auth scope, such as for teams and projects",
|
||||||
|
"required": true,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"paramType": "path",
|
||||||
|
"name": "name",
|
||||||
|
"description": "name of the Pod",
|
||||||
|
"required": true,
|
||||||
|
"allowMultiple": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"*/*"
|
||||||
|
],
|
||||||
|
"consumes": [
|
||||||
|
"*/*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -5957,6 +5957,36 @@
|
|||||||
"consumes": [
|
"consumes": [
|
||||||
"*/*"
|
"*/*"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"method": "POST",
|
||||||
|
"summary": "connect POST requests to exec of Pod",
|
||||||
|
"nickname": "connectPostPodExec",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"paramType": "path",
|
||||||
|
"name": "namespace",
|
||||||
|
"description": "object name and auth scope, such as for teams and projects",
|
||||||
|
"required": true,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"paramType": "path",
|
||||||
|
"name": "name",
|
||||||
|
"description": "name of the Pod",
|
||||||
|
"required": true,
|
||||||
|
"allowMultiple": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"*/*"
|
||||||
|
],
|
||||||
|
"consumes": [
|
||||||
|
"*/*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@ -6044,6 +6074,36 @@
|
|||||||
"consumes": [
|
"consumes": [
|
||||||
"*/*"
|
"*/*"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"method": "POST",
|
||||||
|
"summary": "connect POST requests to portforward of Pod",
|
||||||
|
"nickname": "connectPostPodPortforward",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"paramType": "path",
|
||||||
|
"name": "namespace",
|
||||||
|
"description": "object name and auth scope, such as for teams and projects",
|
||||||
|
"required": true,
|
||||||
|
"allowMultiple": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string",
|
||||||
|
"paramType": "path",
|
||||||
|
"name": "name",
|
||||||
|
"description": "name of the Pod",
|
||||||
|
"required": true,
|
||||||
|
"allowMultiple": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"*/*"
|
||||||
|
],
|
||||||
|
"consumes": [
|
||||||
|
"*/*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -280,7 +280,8 @@ func (r *ProxyREST) Connect(ctx api.Context, id string, opts runtime.Object) (re
|
|||||||
return genericrest.NewUpgradeAwareProxyHandler(location, nil, false), nil
|
return genericrest.NewUpgradeAwareProxyHandler(location, nil, false), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var upgradeableMethods = []string{"GET"}
|
// Support both GET and POST methods. Over time, we want to move all clients to start using POST and then stop supporting GET.
|
||||||
|
var upgradeableMethods = []string{"GET", "POST"}
|
||||||
|
|
||||||
// ExecREST implements the exec subresource for a Pod
|
// ExecREST implements the exec subresource for a Pod
|
||||||
type ExecREST struct {
|
type ExecREST struct {
|
||||||
|
@ -249,7 +249,7 @@ func ExecLocation(getter ResourceGetter, connInfo client.ConnectionInfoGetter, c
|
|||||||
nodeHost := pod.Spec.NodeName
|
nodeHost := pod.Spec.NodeName
|
||||||
if len(nodeHost) == 0 {
|
if len(nodeHost) == 0 {
|
||||||
// If pod has not been assigned a host, return an empty location
|
// If pod has not been assigned a host, return an empty location
|
||||||
return nil, nil, fmt.Errorf("pod %s does not have a host assigned", name)
|
return nil, nil, errors.NewBadRequest(fmt.Sprintf("pod %s does not have a host assigned", name))
|
||||||
}
|
}
|
||||||
nodeScheme, nodePort, nodeTransport, err := connInfo.GetConnectionInfo(nodeHost)
|
nodeScheme, nodePort, nodeTransport, err := connInfo.GetConnectionInfo(nodeHost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -275,6 +275,16 @@ func getTestRequests() []struct {
|
|||||||
{"POST", timeoutPath("pods", api.NamespaceDefault, ""), aPod, code201},
|
{"POST", timeoutPath("pods", api.NamespaceDefault, ""), aPod, code201},
|
||||||
{"PUT", timeoutPath("pods", api.NamespaceDefault, "a"), aPod, code200},
|
{"PUT", timeoutPath("pods", api.NamespaceDefault, "a"), aPod, code200},
|
||||||
{"GET", path("pods", api.NamespaceDefault, "a"), "", code200},
|
{"GET", path("pods", api.NamespaceDefault, "a"), "", code200},
|
||||||
|
// GET and POST for /exec should return Bad Request (400) since the pod has not been assigned a node yet.
|
||||||
|
{"GET", path("pods", api.NamespaceDefault, "a") + "/exec", "", code400},
|
||||||
|
{"POST", path("pods", api.NamespaceDefault, "a") + "/exec", "", code400},
|
||||||
|
// PUT for /exec should return Method Not Allowed (405).
|
||||||
|
{"PUT", path("pods", api.NamespaceDefault, "a") + "/exec", "", code405},
|
||||||
|
// GET and POST for /portforward should return Bad Request (400) since the pod has not been assigned a node yet.
|
||||||
|
{"GET", path("pods", api.NamespaceDefault, "a") + "/portforward", "", code400},
|
||||||
|
{"POST", path("pods", api.NamespaceDefault, "a") + "/portforward", "", code400},
|
||||||
|
// PUT for /portforward should return Method Not Allowed (405).
|
||||||
|
{"PUT", path("pods", api.NamespaceDefault, "a") + "/portforward", "", code405},
|
||||||
{"PATCH", path("pods", api.NamespaceDefault, "a"), "{%v}", code200},
|
{"PATCH", path("pods", api.NamespaceDefault, "a"), "{%v}", code200},
|
||||||
{"DELETE", timeoutPath("pods", api.NamespaceDefault, "a"), deleteNow, code200},
|
{"DELETE", timeoutPath("pods", api.NamespaceDefault, "a"), deleteNow, code200},
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user