Когда я sh прямо внутри моего модуля и запускаю в командной строке следующее: curl -v --cacert /var/run/secrets/kubernetes.io/serviceaccount/ca.crt -H "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)" https://kubernetes.default.svc.cluster.local/apis/batch/v1/watch/namespaces/kludge/jobs/api-job-12
, он работает и возвращает все обновления для указанного задания (api-job-12
) в виде потока.
Однако, когда я нахожусь в своем коде уровня приложения, я не могу получить API для потоковой передачи ответа (время ожидания запроса истекло без ответа вообще). Я работаю в среде PHP (Laravel) и использую Guzzle для своего http-клиента.
Вот мой код:
$token = file_get_contents('/var/run/secrets/kubernetes.io/serviceaccount/token');
$client = new Client([
'headers' => [
'Authorization' => "Bearer {$token}"
]
]);
$response = $client->get(
'https://kubernetes.default.svc/apis/batch/v1/watch/namespaces/kludge/jobs/api-job-12',
[
'verify' => '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt',
'stream' => true
]
);
dd($response->getBody()->getContents());
Когда я сбрасываю $response->getBody()
, я получаю следующее:
^ GuzzleHttp\Psr7\Stream {#338
-stream: stream resource @21
crypto: array:4 [
"protocol" => "TLSv1.2"
"cipher_name" => "ECDHE-RSA-AES128-GCM-SHA256"
"cipher_bits" => 128
"cipher_version" => "TLSv1.2"
]
timed_out: false
blocked: true
eof: false
wrapper_data: array:4 [
0 => "HTTP/1.1 200 OK"
1 => "Content-Type: application/json"
2 => "Date: Sun, 01 Mar 2020 20:15:33 GMT"
3 => "Connection: close"
]
wrapper_type: "http"
stream_type: "tcp_socket/ssl"
mode: "r"
unread_bytes: 0
seekable: false
uri: "https://kubernetes.default.svc/apis/batch/v1/watch/namespaces/kludge/jobs/api-job-12"
options: array:2 [
"http" => array:5 [
"method" => "GET"
"header" => """
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrbHVkZ2UiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlY3JldC5uYW1lIjoiZGVmYXVsdC10b2tlbi14ZjhsciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZDA5ZjZiZTAtM2UyOS00NWU3LWI3ZjgtOGE1YWI0OGZjNDJiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OmtsdWRnZTpkZWZhdWx0In0.eAtABzj-SimmTGNCQXkmtVHFPYoxiZWV7ET5tYK3OIa6-Ea6WA3cy7cMmObRILTc26cLU4YX8YovhzoNAV8RkteKAVGv2HNvaeOXD_AKkYilX618SUMEfat-zsnXYUego24gNLPtPFRefRyEwAnxf6E61DDwSWWlyptKiggcnl8GHrlY_14oumOsFpsjsRTc807DsuZGn1jCU1Dw2DPhSz457a-afXb0jggzorYNzDtfG6rBTKYctPI4wfh30y9iwjPLTU5L5B-8mYqWn9lgOs2Z9XkFu1GRUD19j6bgAnzoyfVCY8uJp9FGi1Ega84n_MsC6cXmS7K7_QiyBtFR-Q
User-Agent: GuzzleHttp/6.5.1 curl/7.64.0 PHP/7.2.28
Host: kubernetes.default.svc
Content-Length: 0
Connection: close
"""
"protocol_version" => "1.1"
"ignore_errors" => true
"follow_location" => 0
]
"ssl" => array:4 [
"cafile" => "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
Это выглядит как объект потока, но объект говорит, что у него нет байтов для чтения и что он не доступен для поиска. У кого-нибудь есть идеи относительно того, как я могу получить потоковый ответ, используя PHP здесь?
Вот конечная точка API Kubernetes, которую я вызываю: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#watch -47