Как я могу заставить клиента fabric8 k8s в моей функции AWS Lambda проходить аутентификацию с помощью EKS? - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть фрагмент кода, который я вызываю как лямбда-функция в AWS. Внутри лямбда-функции я выполняю вызов кластера EKS с помощью клиента fabric8. Все, что я делаю в этот момент - это чтобы клиент извлекал несвязанные PVC:

        KubernetesClient client = new DefaultKubernetesClient();

        MixedOperation<PersistentVolumeClaim, PersistentVolumeClaimList,
                DoneablePersistentVolumeClaim, Resource<PersistentVolumeClaim,
                DoneablePersistentVolumeClaim>> operation = client.persistentVolumeClaims();
        PersistentVolumeClaimList pvcList = operation.inAnyNamespace().list();
        java.util.List<PersistentVolumeClaim> unboundItems = pvcList.getItems()
                .stream()
                .filter(pvc -> !"bound".equalsIgnoreCase(pvc.getStatus().getPhase()))
                .collect(Collectors.toList());

Один из рабочих DevOps добавил моего пользователя ARN в ConfigMap, так что если я запустлю это локально и просто передам AWS учетные данные через Свойства системы, я получаю результаты обратно. Он также экспериментировал с добавлением лямбда-роли ARN, но это не работает. Если я разверну код в своей лямбде, я получу ошибку 403:

"errorMessage": "Failure executing: GET at: https://XYZ.us-west-2.eks.amazonaws.com/api/v1/persistentvolumeclaims. Message: persistentvolumeclaims is forbidden: User \"system:anonymous\" cannot list resource \"persistentvolumeclaims\" in API group \"\" at the cluster scope. Received status: Status(apiVersion=v1, code=403, details=StatusDetails(causes=[], group=null, kind=persistentvolumeclaims, name=null, retryAfterSeconds=null, uid=null, additionalProperties={}), kind=Status, message=persistentvolumeclaims is forbidden: User \"system:anonymous\" cannot list resource \"persistentvolumeclaims\" in API group \"\" at the cluster scope, metadata=ListMeta(_continue=null, remainingItemCount=null, resourceVersion=null, selfLink=null, additionalProperties={}), reason=Forbidden, status=Failure, additionalProperties={}).",
  "errorType": "io.fabric8.kubernetes.client.KubernetesClientException"

Я довольно новичок в k8s, fabric8 и EKS, поэтому извиняюсь, если я делаю что-то явно глупое здесь. У меня есть файл ~ / .kube / config, который я включаю в Lambda ZIP-файл (мне сказали, что это небезопасно). Файл конфигурации, кажется, работает нормально, когда я запускаю код локально. Я устанавливаю системное свойство kubeconfig , чтобы оно указывало на файл. Я понимаю, что для правильной аутентификации с помощью EKS должен быть доступен некоторый внешний механизм, такой как aws-iam-authenticator, для клиента k8s. Чего я не знаю, так это того, должен ли я использовать какой-то другой механизм, когда он работает в лямбде?

Я нашел статью , в которой описан общий процесс проведения лямбда-разговора с EKS, и я поэкспериментировал с предложенной конфигурацией роли IAM, а также добавил роль лямбды ARN ConfigMap , но пока ничего не помогло. Я действительно заблокирован этим, и если у кого-то есть какие-либо подсказки, я весь уши Спасибо.

...