Хранилище HashiCorp Включить вызов REST

Я следую руководству HashiCorp, и все выглядит нормально, пока я не пытаюсь запустить модуль «webapp» — простой модуль, единственной функцией которого является демонстрация того, что он может запускать и монтировать секретный том.

Ошибка (отказано в доступе к вызову REST) ​​показана в нижней части вывода этой команды:

kubectl describe pod webapp
Name:             webapp
Namespace:        default
Priority:         0
Service Account:  webapp-sa
Node:             docker-desktop/192.168.65.4
Start Time:       Tue, 14 Feb 2023 09:32:07 -0500
Labels:           <none>
Annotations:      <none>
Status:           Pending
IP:
IPs:              <none>
Containers:
  webapp:
    Container ID:
    Image:          jweissig/app:0.0.1
    Image ID:
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /mnt/secrets-store from secrets-store-inline (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-5b76r (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  secrets-store-inline:
    Type:              CSI (a Container Storage Interface (CSI) volume source)
    Driver:            secrets-store.csi.k8s.io
    FSType:
    ReadOnly:          true
    VolumeAttributes:      secretProviderClass=vault-database
  kube-api-access-5b76r:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason       Age                 From               Message
  ----     ------       ----                ----               -------
  Normal   Scheduled    42m                 default-scheduler  Successfully assigned default/webapp to docker-desktop
  Warning  FailedMount  20m (x8 over 40m)   kubelet            Unable to attach or mount volumes: unmounted volumes=[secrets-store-inline], unattached volumes=[secrets-store-inline kube-api-access-5b76r]: timed out waiting for the condition
  Warning  FailedMount  12m (x23 over 42m)  kubelet            MountVolume.SetUp failed for volume "secrets-store-inline" : rpc error: code = Unknown desc = failed to mount secrets store objects for pod default/webapp, err: rpc error: code = Unknown desc = error making mount request: couldn't read secret "db-password": Error making API request.

URL: GET http://vault.default:8200/v1/secret/data/db-pass
Code: 403. Errors:

* 1 error occurred:
           * permission denied
  Warning  FailedMount  2m19s (x4 over 38m)  kubelet  Unable to attach or mount volumes: unmounted volumes=[secrets-store-inline], unattached volumes=[kube-api-access-5b76r secrets-store-inline]: timed out waiting for the condition

Итак, кажется, что этот вызов REST терпит неудачу: GET http://vault.default:8200/v1/secret/data/db-pass. Действительно, это также не работает из curl:

curl -vik -H "X-Vault-Token: root"  http://localhost:8200/v1/secret/data/db-pass
*   Trying 127.0.0.1:8200...
* TCP_NODELAY set
* connect to 127.0.0.1 port 8200 failed: Connection refused
* Failed to connect to localhost port 8200: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 8200: Connection refused

В этот момент я немного потерялся. Я не уверен, что вызов REST настроен правильно, т.е. таким образом, что Vault его примет; но я также не уверен, как настроить его по-другому.

Журналы Vault показывают следующую информацию, поэтому мне кажется, что порт и токен, которые я использую, верны:

2023-02-14 09:07:14 You may need to set the following environment variables:
2023-02-14 09:07:14     $ export VAULT_ADDR='http://[::]:8200'
2023-02-14 09:07:14 The root token is displayed below
2023-02-14 09:07:14 Root Token: root

Vault вроде бы нормально работает в Kubernetes:

kubectl get pods
NAME                                    READY   STATUS    RESTARTS      AGE
vault-0                                 1/1     Running   1 (22m ago)   32m
vault-agent-injector-77fd4cb69f-mf66p   1/1     Running   1 (22m ago)   32m

Если я попытаюсь показать статус хранилища:

vault status
Error checking seal status: Get "http://[::]:8200/v1/sys/seal-status": dial tcp [::]:8200: connect: connection refused

Я не думаю, что Хранилище запечатано, но если я попытаюсь распечатать его:

vault operator unseal
Unseal Key (will be hidden):
Error unsealing: Put "http://[::]:8200/v1/sys/unseal": dial tcp [::]:8200: connect: connection refused

Есть идеи?

Вы создали правильную политику в хранилище, чтобы ваш клиент мог получить доступ к секрету, сохраненному в хранилище?

Harsh Manvar 14.02.2023 19:40

@HarshManvar Спасибо за ответ! Я новичок в Vault. Тем не менее, я вижу, что Vault работает нормально на K8s в Docker, но если я запускаю vault status, я получаю Error checking seal status: Get "http://[::]:8200/v1/sys/seal-status": dial tcp [::]:8200: connect: connection refused. То же самое, если я попытаюсь завиться. Так может быть, Vault настроен неправильно? Но я просто сделал то, о чем меня попросил учебник.

radumanolescu 14.02.2023 19:45

Ваше хранилище запечатано, сначала распечатайте его, иначе вы сможете получить доступ к любым данным. попробуйте открыть пользовательский интерфейс хранилища с переадресацией порта, иначе вам может потребоваться загрузить ключи, и он будет распечатан в первый раз. ваше хранилище не будет готово, также при проверке будет статус 0/1 kubectl get pods

Harsh Manvar 14.02.2023 19:49

Какое-либо обновление об этом сначала распечатывает хранилище внутри хранилища или использует пользовательский интерфейс хранилища?

Harsh Manvar 15.02.2023 05:30

@HarshManvar Я не думаю, что Убежище было запечатано. Я не знаю, как получить доступ к пользовательскому интерфейсу, и я не думаю, что смогу, так как он работает внутри K8s в Docker на моем ПК, и Docker не показывает, что приложение Vault предоставляет какие-либо порты снаружи.

radumanolescu 15.02.2023 20:59
Конечные и Readonly классы в PHP
Конечные и Readonly классы в PHP
В прошлом, когда вы не хотели, чтобы другие классы расширяли определенный класс, вы могли пометить его как final.
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
БЭМ: Конвенция об именовании CSS
БЭМ: Конвенция об именовании CSS
Я часто вижу беспорядочный код CSS, особенно если проект большой. Кроме того, я совершал эту ошибку в профессиональных или личных проектах и...
Революционная веб-разработка ServiceNow
Революционная веб-разработка ServiceNow
В быстро развивающемся мире веб-разработки ServiceNow для достижения успеха крайне важно оставаться на вершине последних тенденций и технологий. По...
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Как добавить SEO(Search Engine Optimization) в наше веб-приложение и как это работает?
Заголовок веб-страницы играет наиболее важную роль в SEO, он помогает поисковой системе понять, о чем ваш сайт.
Конфигурация Jest в angular
Конфигурация Jest в angular
В этой статье я рассказываю обо всех необходимых шагах, которые нужно выполнить при настройке jest в angular.
0
5
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  1. Что касается учебника, он работает. Не уверен, что я делаю не так, но я снова запустил все это, и это сработало. Если бы мне пришлось угадывать, я бы заподозрил, что некоторые из YAML, задействованных в настройке модулей, были искажены (поскольку пробелы значительны).
  2. Команда vault status работает, но только с терминала, работающего внутри модуля Vault. Кластер Kubernetes-in-Docker-on-DockerDesktop не предоставляет никаких портов для этих модулей, поэтому, хотя на моем ПК установлен vault-cli, я не могу использовать vault status из-за пределов модулей.

Другие вопросы по теме