使用Google IAM进行GKE服务Web访问

时间:2018-09-02 08:35:38

标签: kubernetes google-cloud-platform google-kubernetes-engine google-identity google-iam

我正在GKE上托管应用程序,并希望能够允许我组织中的用户从Web上访问该应用程序。我希望他们能够使用他们的Google帐户IAM凭据登录。

是否可以配置一种服务来公开群集的Web终结点,以便用户仅需使用其Google帐户登录即可访问该服务?

例如,在测试服务时,我可以轻松地在云外壳中进行Web预览,然后在浏览器中访问Web应用程序。

是否可以配置此方法,以便我组织中授权的任何用户都可以访问我的应用程序的Web界面?

(请注意,我问过same question on DevOps,但我觉得该站点尚未达到应有的活跃度,所以我也在这里问)

1 个答案:

答案 0 :(得分:2)

好的,我设法使其完美运行。但是它采取了一些步骤。我在此处包括设置IAP using an ingress所需的清单。它需要一些我在下面清单中列出的东西。希望这可以对其他人有所帮助,因为我找不到将所有这些汇总在一起的单一来源。基本上,您需要做的就是运行kubectl apply -f secure-ingress.yaml以使所有功能正常运行(只要您具有所有依赖关系),然后只需根据需要配置IAP


secure-ingress.yaml

# Configure IAP security using ingress automatically
# requirements: kubernetes version at least 1.10.5-gke.3
# requirements: service must respond with 200 at / endpoint (the healthcheck)
# dependencies: need certificate secret my-secret-cert
# dependencies: need oath-client secret my-secret-oath (with my.domain.com configured)
# dependencies: need external IP address my-external-ip
# dependencies: need domain my.domain.com to point to my-external-ip IP
# dependencies: need an app (deployment/statefulset) my-app
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-secure-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "gce"
    kubernetes.io/ingress.allow-http: "false"
    kubernetes.io/ingress.global-static-ip-name: my-external-ip
spec:
  tls:
  - secretName: my-secret-cert
  backend:
    serviceName: my-service-be-web
    servicePort: 1234
---
kind: Service
apiVersion: v1
metadata:
  name: my-service-be-web
  namespace: default
  annotations:
    beta.cloud.google.com/backend-config:
      '{"default": "my-service-be-conf"}'
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 1234
      targetPort: 1234
      name: my-port-web
---
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-service-be-conf
  namespace: default
spec:
  iap:
    enabled: true
    oauthclientCredentials:
      secretName: my-secret-oath