Я думаю, что вы уже поняли это, но лучший способ взаимодействовать с другими службами OCI в вашей функции - это аутентифицироваться в этой службе с помощью «принципала ресурса» функции. Это идентификатор, присвоенный вашей функции, чтобы вы могли писать политики, позволяющие ей взаимодействовать с другими ресурсами OCI. Это избавляет вас от необходимости самостоятельно обрабатывать любые учетные данные, поскольку эфемерный ключ API, представляющий эту личность, передается в вашу функцию службой.
Для взаимодействия с кластером Kubernetes вам понадобится kubeconfig, который, как видите, может быть сгенерирован API OKE.
Возвращенный kubeconfig использует токены на основе эфемерного времени для аутентификации в кластере, и, как вы можете видеть для интерактивных сценариев использования, существует реализация генерации этого токена в интерфейсе командной строки OCI.
К сожалению, в SDK нет реализации этого метода, поэтому вам необходимо выполнить одно из следующих действий.
Скопируйте код из интерфейса командной строки, который генерирует токен, в код вашей функции, при необходимости переведя на выбранный язык, а затем передайте этот сгенерированный токен в свой kubeconfig.
Сохраните конфигурацию, которая выполняет OCI CLI для получения токена, установите OCI CLI и заставьте OCI CLI сгенерировать токен с использованием принципала ресурса.
Поскольку вы сказали, что попробовали первый подход и не добились успеха, и поскольку первый подход несколько неудобен, я расскажу, как вы достигли второго метода.
Чтобы установить OCI CLI, вам необходимо взять под контроль процесс сборки докера, чтобы вы могли изменять содержимое сгенерированного образа функции. У каждого FDK есть «неявный» Dockerfile. Вы можете найти шаблон для них в Fn CLI, а затем вы можете поместить этот Dockerfile в свой каталог функций и изменить тип функции в func.yaml на «docker». В блоге есть сообщение о том, как извлечь неявный файл докеров здесь https://constructive-laziness.blogspot.com/2020/05/the-case-of-vanishing-dockerfile.html Теперь вы можете добавить в файл Dockerfile шаги по установке интерфейса командной строки OCI в соответствии с инструкциями. здесь: https://docs.cloud.oracle.com/en-us/iaas/Content/API/SDKDocs/climanualinst.htm Поскольку базовые образы FDK для Go основаны на альпийских версиях, для этого могут потребоваться некоторые изменения.
Чтобы заставить OCI CLI использовать принципала ресурса, вам необходимо установить для переменной среды OCI_CLI_AUTH
значение resource_principal
. Это можно сделать в строке ENV
на последнем этапе вашего Dockerfile.
Вам также необходимо убедиться, что у вас есть свои функции в динамической группе и соответствующая политика для вашей функции в соответствии с документами здесь https://docs.cloud.oracle.com/en-us/iaas/Content/Functions/Tasks/functionsaccessingociresources.htm?Highlight=functions%20resource%20principal
(Заявление об отказе от ответственности, я работаю в Oracle в группе функций, и приведенный выше совет, насколько мне известно, верен, но не является официальной поддержкой)
person
rconan
schedule
10.06.2020