Рейтинг:0

Используйте клиентские сертификаты .kube/config в curl

флаг cn

Если вы используете kubectl получить pod foo -v10 ты видишь завиток линии, но это не работает.

Пример:

guettli@p15:~$ curl -k -v -XGET -H "Принять: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1; g=meta.k8s.io,application/json" -H "Агент пользователя: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d" 'https://127.0.0.1:44529/api/v1/namespaces/ по умолчанию/стручки/busybox' 

* Попытка 127.0.0.1:44529...
* Подключено к порту 127.0.0.1 (127.0.0.1) 44529 (#0)
* ALPN, предлагая h2
* ALPN, предлагающий http/1.1
* успешно установить места проверки сертификата:
* CA-файл: /etc/ssl/certs/ca-certificates.crt
* CApath: /etc/ssl/certs
* TLSv1.3 (OUT), рукопожатие TLS, приветствие клиента (1):
* TLSv1.3 (IN), рукопожатие TLS, приветствие сервера (2):
* TLSv1.3 (IN), рукопожатие TLS, зашифрованные расширения (8):
* TLSv1.3 (IN), рукопожатие TLS, запрос CERT (13):
* TLSv1.3 (IN), рукопожатие TLS, сертификат (11):
* TLSv1.3 (IN), рукопожатие TLS, проверка CERT (15):
* TLSv1.3 (IN), рукопожатие TLS, Готово (20):
* TLSv1.3 (OUT), изменение шифрования TLS, изменение спецификации шифрования (1):
* TLSv1.3 (OUT), рукопожатие TLS, сертификат (11):
* TLSv1.3 (OUT), рукопожатие TLS, Готово (20):
* SSL-соединение с использованием TLSv1.3/TLS_AES_256_GCM_SHA384
* ALPN, сервер принят для использования h2
*Сертификат сервера:
* Тема: CN=kube-apiserver
* дата начала: 2 февраля 10:34:41 2022 GMT
* срок действия: 2 февраля 10:34:41 2023 GMT
* эмитент: CN=kubernetes
* Результат проверки SSL-сертификата: невозможно получить сертификат локального эмитента (20), все равно продолжается.
* Используя HTTP2, сервер поддерживает многократное использование
* Состояние соединения изменено (HTTP/2 подтверждено)
* Копирование данных HTTP/2 из буфера потока в буфер соединения после обновления: len=0
* Использование идентификатора потока: 1 (простой дескриптор 0x55ef6413b5e0)
> ПОЛУЧИТЬ /api/v1/namespaces/default/pods/busybox HTTP/2
> Хост: 127.0.0.1:44529
> принять: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json
> пользовательский агент: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d
> 
* TLSv1.3 (IN), рукопожатие TLS, билет на выпуск новостей (4):
* Состояние соединения изменено (MAX_CONCURRENT_STREAMS == 250)!
< HTTP/2 403 
< cache-control: без кеша, частный
<тип содержимого: приложение/json
< x-content-type-options: nosniff
< x-kubernetes-pf-flowschema-uid: d45b0ee7-7e06-463e-b8d1-6ab74852b967
<x-kubernetes-pf-prioritylevel-uid: 3be84978-2771-4afe-972d-50dec7f8b951
<длина контента: 289
<дата: пн, 21 февраля 2022 г., 17:20:21 по Гринвичу
< 

{"вид":"Статус","apiVersion":"v1","метаданные":{},
 "статус":"Неудача",
 "message":"pods \"busybox\" запрещен: пользователь \"system:anonymous\" не может получить ресурс \"pods\" в группе API \"\" в пространстве имен \"default\"",
 "причина": "Запрещено",
 «подробности»: {«имя»: «busybox», «вид»: «стручки»}, «код»: 403}

* Соединение №0 с хостом 127.0.0.1 осталось нетронутым

Как я могу использовать сертификат клиента, который находится в .кубе/конфиг?

Я использую вид 0.11.1

флаг in
Ну, что вы пробовали до сих пор, кроме того, что просто волшебным образом ожидали, что `curl` проанализирует файл yaml kubeconfig? Кроме того, в духе «проблемы X/Y» это звучит так, как будто вы хотите переопределить `kubectl`, используя много bash по какой-то причине.
Рейтинг:1
флаг cn

Я нашел это решение:

кот .kube/config | yq .clusters[0].cluster.certificate-authority-data | base64 -d -> .kube/ca.pem

кот .kube/config | yq .users[0].user.client-certificate-data | base64 -d -> .kube/user.pem

кот .kube/config | yq .users[0].user.client-key-data | base64 -d -> .kube/user-key.pem
curl --cert .kube/user.pem --key .kube/user-key.pem --cacert .kube/ca.pem \
  -v -XGET -H "Принять: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application /json" \
  -H "Агент пользователя: kubectl/v1.23.4 (linux/amd64) kubernetes/e6c093d" \
 'https://127.0.0.1:44529/api/v1/namespaces/default/pods/busybox'
Рейтинг:0
флаг us

Я провел небольшое исследование. Мое рабочее решение ниже:

Кавычки необходимы из-за тире в именах тегов:

кошка ~/.kube/config | yq -r '.clusters[0].cluster."данные центра сертификации"' | base64 -d -> ~/.kube/ca.pem 
кошка ~/.kube/config | yq -r '.users[0].user."данные-сертификата клиента"' | base64 -d -> ~/.kube/user.pem
кошка ~/.kube/config | yq -r '.users[0].user."данные-ключ-клиента"' | base64 -d -> ~/.kube/user-key.pem

Еще одна полезная переменная:

SERVER_URL=$(cat ~/.kube/config | yq -r .clusters[0].cluster.server)

Пример завитка:

curl --cacert ~/.kube/ca.pem --cert ~/.kube/user.pem --key ~/.kube/user-key.pem -X GET ${SERVER_URL}/api/v1/namespaces/ по умолчанию/стручки/busybox

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.