【问题标题】:Kubernetes Ingress Nginx and AWS API Gateway client certificateKubernetes Ingress Nginx 和 AWS API Gateway 客户端证书
【发布时间】:2018-09-17 14:34:59
【问题描述】:

我有一个 AWS API 网关和一个 Ingress Nginx。

我希望我的 Ingress 只接受来自 API Gateway 的流量: 所以我使用了 AWS API Gateway 客户端证书。

我已经创建了客户端证书的秘密:

kubectl create secret generic api --from-file=api-gateway-client-certificate.crt

我的 Ingress Service 具有以下配置(它是 TCP AWS 经典 ELB):

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress
  labels:
    app: ingress-nginx
  annotations:
    ingress.kubernetes.io/server-alias: 'dev.ingress.website.com'
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '3600'
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
spec:
  type: LoadBalancer
  selector:
    app: ingress-nginx
  ports:
  - name: https
    port: 443
    targetPort: http

我的 Ingress 规则是这样的:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    nginx.ingress.kubernetes.io/auth-tls-secret: "default/api"
    nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
  name: items
spec:
    tls:
    - hosts:
      - dev.ingress.website.com
      secretName: ingress-website-com-tls
    rules:
    - host: dev.ingress.website.com
      http:
        paths:
        - backend:
            serviceName: items
            servicePort: 80
          path: "/items"

但它不起作用。 我可以从我的浏览器访问 dev.ingress.website.com/items :只有 API 网关应该可以访问。

这是 nginx.conf 的输出:

location /items {

            if ($scheme = https) {
            more_set_headers                        "Strict-Transport-Security: max-age=15724800; includeSubDomains;";
            }

            port_in_redirect off;

            set $proxy_upstream_name "default-items-80";

            set $namespace      "default";
            set $ingress_name   "items";
            set $service_name   "items";

            # enforce ssl on server side
            if ($redirect_to_https) {

                return 308 https://$best_http_host$request_uri;

            }


            proxy_set_header Host                   $best_http_host;

            # Pass the extracted client certificate to the backend

            proxy_set_header ssl-client-cert        "";
            proxy_set_header ssl-client-verify      "";
            proxy_set_header ssl-client-dn          "";

ssl-client-certssl-client-verify 似乎是空的。 所以我猜是因为这个?

但我不知道为什么。 有没有人知道如何解决它?

提前致谢! J.

【问题讨论】:

    标签: nginx kubernetes aws-api-gateway kubernetes-ingress


    【解决方案1】:

    我在 Azure 中遇到了同样的情况,所以我最终使用内部 LB 运行入口......将 Api GW 放在同一个 VNET 中以便我可以访问。无论如何,我认为这是一个开销。

    【讨论】:

      猜你喜欢
      • 2019-02-19
      • 1970-01-01
      • 2017-02-23
      • 2016-01-09
      • 2018-02-15
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 2017-10-02
      相关资源
      最近更新 更多