【问题标题】:How can I create different auth-type for different target in ingress controller?如何在入口控制器中为不同的目标创建不同的身份验证类型?
【发布时间】:2021-08-30 02:46:05
【问题描述】:

我正在将 EKS 集群部署到 AWS 并使用 alb 入口控制器指向我的 K8S 服务。入口规范如下所示。

有两个目标path: /*path: /es/*。而且我还配置alb.ingress.kubernetes.io/auth-type使用cognito作为认证方式。

我的问题是如何为不同的目标配置不同的auth-type?我想将cognito 用于/*none 用于/es/*。我怎样才能做到这一点?

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: sidecar
  namespace: default
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/group.name: sidecar
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/group.order: '1'
    alb.ingress.kubernetes.io/healthcheck-path: /health
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]'
    # Auth
    alb.ingress.kubernetes.io/auth-type: cognito
    alb.ingress.kubernetes.io/auth-idp-cognito: '{"userPoolARN":"xxxx","userPoolClientID":"xxxx","userPoolDomain":"xxxx"}'
    alb.ingress.kubernetes.io/auth-scope: 'email openid aws.cognito.signin.user.admin'
    alb.ingress.kubernetes.io/certificate-arn: xxxx

spec:
  rules:
    - http:
        paths:
          - path: /es/*
            backend:
              serviceName: sidecar-entrypoint
              servicePort: 8080
          - path: /*
            backend:
              serviceName: server-entrypoint
              servicePort: 8081


【问题讨论】:

    标签: amazon-web-services kubernetes amazon-eks


    【解决方案1】:

    这个问题出现了很多,所以我想它需要被公关到他们的文档中。

    Ingress 资源是累积的,因此您可以将路径分成两个单独的 Ingress 资源,以便对每个资源进行不同的注释。它们将与整个集群中的所有其他 Ingress 资源组合以形成最终配置

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: sidecar-star
      namespace: default
      annotations:
        kubernetes.io/ingress.class: alb
        # ... and the rest ...
    spec:
      rules:
        - http:
            paths:
              - path: /*
                backend:
                  serviceName: server-entrypoint
                  servicePort: 8081
    ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: sidecar-es
      namespace: default
      annotations:
        kubernetes.io/ingress.class: alb
        # ... and the rest ...
    spec:
      rules:
        - http:
            paths:
              - path: /es/*
                backend:
                  serviceName: sidecar-entrypoint
                  servicePort: 8080
    

    【讨论】:

      【解决方案2】:

      上面的解决方案对我不起作用。如果需要,您可以在服务清单中使用每个与身份验证相关的注释,这比编写多个入口对象并将它们组合在一起更易于阅读。见以下代码:

      apiVersion: v1
      kind: Service
      metadata:
        name: admin-webapp
        annotations:
          alb.ingress.kubernetes.io/auth-type: cognito
          alb.ingress.kubernetes.io/auth-scope: openid
          alb.ingress.kubernetes.io/auth-session-timeout: '3600'
          alb.ingress.kubernetes.io/auth-session-cookie: AWSELBAuthSessionCookie
          alb.ingress.kubernetes.io/auth-idp-cognito: '{"UserPoolArn": "arn:aws:cognito-idp:us-east-1:xxx:userpool/xxxx","UserPoolClientId":"xxx","UserPoolDomain":"xxx"}'
          alb.ingress.kubernetes.io/auth-on-unauthenticated-request: authenticate
      spec:
        selector:
          app: admin-webapp-deployment
        ports:
          - name: http
            port: 80
        type: NodePort
      

      我有同样的问题,这段代码解决了我的问题:)

      【讨论】:

        猜你喜欢
        • 2020-06-04
        • 1970-01-01
        • 2016-08-13
        • 2021-03-25
        • 2017-07-31
        • 2017-08-26
        • 1970-01-01
        • 2013-06-17
        • 2021-12-01
        相关资源
        最近更新 更多