Azure Kubernetes服务(AKS)-具有CORS访问权限的Http应用程序路由

时间:2018-07-16 18:17:26

标签: cors kubernetes-ingress azure-kubernetes

我最近已经签署了Azure Kubernetes的免费计划。我的问题涉及在Azure Kubernetes服务(AKS)上使用基于入口主机的http应用程序路由配置CORS。我试图找到一个Azure Kubernetes服务(AKS)论坛。这是与我的问题最接近的论坛。

我已为群集启用http_application_routing附加组件。我最初遵循http应用程序路由中的文档。这成功为我的每个入口主机端点创建了DNS区域条目。但是,我希望在入口主机端点之间配置CORS访问。首先,我添加了以下注释,并将kubernetes.io/ingress.class注释设置为addon-http-application-routing。

nginx.ingress.kubernetes.io/enable-cors:               "true"
nginx.ingress.kubernetes.io/secure-backends:        "true"
nginx.ingress.kubernetes.io/cors-allow-origin:        "https://www.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
nginx.ingress.kubernetes.io/cors-allow-headers:     "Authorization, Origin, X-Requested-With, Content-Type, Accept"
nginx.ingress.kubernetes.io/cors-allow-methods:     "DELETE, GET, POST, PUT, OPTIONS, HEAD"

但是,我之后无法再访问入口端点,也没有创建DNS区域条目。随后,我将nginx入口控制器安装到集群上,并将kubernetes.io/ingress.class注释设置为nginx。然后,我将kubernetes DNS区域配置为具有Nginx入口端点的A和TXT记录(请参见下面的清单),以镜像http应用程序路由附加的行为。但是,这些仅持续了很短时间,然后被自动从Kubernetes群集DNS区域中删除。

任何人都可以将我引导到以下资源:

  1. 在使用入口类addon-http-application-routing时为入口控制器配置CORS

  1. 为每个nginx入口主机端点正确配置DNS区域,以便添加的记录集不会自动删除。

亲切问候

dcs3spp

---
apiVersion:                 extensions/v1beta1
kind:                       Ingress
metadata:
  name:                     ingress
      annotations:
      kubernetes.io/ingress.class:                               "nginx"
      nginx.ingress.kubernetes.io/enable-cors:            "true"
      nginx.ingress.kubernetes.io/secure-backends:        "true"
      nginx.ingress.kubernetes.io/cors-allow-origin:     "https://www.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io"
      nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
      nginx.ingress.kubernetes.io/cors-allow-headers:     "Authorization, Origin, X-Requested-With, Content-Type, Accept"
      nginx.ingress.kubernetes.io/cors-allow-methods:     "DELETE, GET, POST, PUT, OPTIONS, HEAD"

spec:
   rules:
   - host:                   www.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io
        http:
           paths:
           - backend:
                serviceName:      angular-service
                servicePort:      8080
             path:               /
   - host:                   auth.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io
         http:
            paths:
                - backend:
                    serviceName:      auth-server-service
                    servicePort:      4433
                path:               /
  - host:                   api.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io
        http:
          paths:
          - backend:
              serviceName:      rest-api-service
              servicePort:      4444
            path:               /
  - host:                   notify.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io
    http:
        paths:
        - backend:
           serviceName:      file-upload-notification-service
           servicePort:      4446
        path:               /
  tls:
      - secretName:             ingress-tls
      hosts:
      -                     www.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io
      -                     auth.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io
      -                     api.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io
      -                     notify.f7e7bb4d71aa4ac3b098.westeurope.aksapp.io

编辑1:更多信息

通过进一步阅读,我了解到HTTP应用程序路由附加使用ExternalDNS + Nginx入口控制器。这可以解释为什么删除我添加到区域中以供我自己的Nginx入口控制器使用的任何记录。 ExternalDNS会从该区域未创建的区域中删除记录。

我已经成功遵循example的一项主机条目。

根据进一步的研究,当从入口规则yaml文件中删除CORS批注时,所有记录都添加到了DNS区域中。

我创建了一个gitlab项目,其中包含两个Yaml规则文件。一种带有CORS注释,另一种没有。

今天,我将Azure Kubernetes群集的位置从 westEurope 切换到了 uksouth ,该位置最近已可用。

第一次部署时,在13分钟后,DNS区域中未创建任何记录。删除入口规则部署,然后使用CORS批注重新应用后,将在DNS区域中创建所有主机的记录。也许,外部DNS 需要花费一些时间来配置CORS,并且 westEurope 位置相对于我在英国的位置而言较慢?不确定为什么在第一次部署13分钟后没有创建DNS区域条目.....将继续监视...

0 个答案:

没有答案