Существует пять частей: учетные данные OAuth, вход, служба, секрет, BackendConfig. Вам понадобится Кубернетес 1.10.5-gke.3
или позже. Включение Cloud IAP для GKE описывает, что вам нужно сделать (или, по крайней мере, большую часть).
OAuth - создание учетных данных для клиента OAuth (возможно, типа «веб-приложение»). Идентификатор и секрет войдут в секретный объект кубе.
Вход - указывает на вашу Службу и ничего лишнего
Служба - комментирует BackendConfig. (Вы можете назначить разные сервисные порты разным бэкэндам. Используйте «default» для простого случая.)
metadata:
annotations:
beta.cloud.google.com/backend-config: '{"default": "mybc"}'
Secret - хранит учетные данные для вашего созданного клиента OAuth
apiVersion: v1
kind: Secret
type: Opaque
metadata:
name: mysecret
data:
client_id: xxx
client_secret: xxx
BackendConfig - это пользовательский ресурс, который поддерживает GKE, так что нет ничего необычного, кроме создания этого объекта
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
name: mybc
spec:
iap:
enabled: true
oauthclientCredentials:
secretName: mysecret
Если у вас все еще возникают проблемы: пересмотрите эту документацию снова; проверьте авторизованные домены OAuth; на странице IAP подтвердите IAP-защищенных пользователей Web App разрешения для предполагаемых пользователей; проверьте, что ваши секретные данные закодированы в base64; проверьте соответствие портов вашим спецификациям Ingress / Service / Deployment.
Необходимо указать аннотацию, как являющуюся аннотацией Во время выполнения с помощью @Retention аннотации на интерфейс аннотации.
т.е.
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{}
Короткий ответ: необходимо добавить @Retention (RetentionPolicy. ВРЕМЯ ВЫПОЛНЕНИЯ) к Вашему определению аннотации.
Объяснение:
Аннотации по умолчанию не сохранены компилятором. Они просто не существуют во времени выполнения. Это может звучать глупым сначала, но существует много аннотаций, которые только используются компилятором (@Override) или различный исходный код анализаторы (@Documentation, и т.д.).
Если Вы захотите на самом деле ИСПОЛЬЗОВАТЬ аннотацию через отражение как в Вашем примере, то необходимо будет позволить Java знать, что Вы хотите, чтобы это обратило внимание на ту аннотацию в самом файле класса. То примечание похоже на это:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation{}
Для получения дополнительной информации проверьте официальный docs1 и особенно отметьте бит о RetentionPolicy.