0

我正在努力在 Azure Kubernetes 服务中重新创建 SmartHotel360 演示,但入口控制器似乎无法正常工作。

这是一个工作示例应该是什么样子(将酒店服务重定向到/hotels-api):http://sh360production.2c3abf6edd44497688b2.westus.aksapp.io/hotels-api/

但是当我部署我的网站时,它会将 /hotels-api 重定向到一个空白网页,这就是我怀疑 Ingress Controller 中出现问题的原因。http://23.96.16.121/hotels-api

从我正在阅读的有关入口控制器的文档中,我使用kubectl apply -f ingress.yaml. 我可以在 K8s UI 的 Ingresses 页面中看到所有服务都具有相同的外部 IP 地址,并且入口服务位于 Services 下,但我没有看到其他任何内容。我使用 helm 部署了所有后端服务,看起来它们也出现在 UI 中。

ingress.yaml 文件如下所示:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
    app: sh360
    component: frontend
  name: sh360-ingress
  annotations:
    kubernetes.io/ingress.class: addon-http-application-routing
    ingress.kubernetes.io/ssl-redirect: "false"  
    nginx.ingress.kubernetes.io/ssl-redirect: "false"  
spec:
  rules:
  - host: swsmarthotel360-409bbcc0.hcp.eastus.azmk8s.io
    http:
      paths:
      - path: /hotels-api
        backend:
          serviceName: helm-test2-hotels-sh360-hotels
          servicePort: 80
      - path: /bookings-api
        backend:
          serviceName: bookings
          servicePort: 80
      - path: /suggestions-api
        backend:
          serviceName: suggestions
          servicePort: 80

由于我是 AKS 和 Kubernetes 的新手,所以 ingress.yaml 文件中是否缺少将重定向到服务的内容?

(完整参考:https ://github.com/Microsoft/SmartHotel360-AKS-DevSpaces-Demo )

4

1 回答 1

1

再次阅读您的问题:-主机:swsmarthotel360-409bbcc0.hcp.eastus.azmk8s.io http:路径:-路径:/hotels-api

所以你的入口可能工作正常。我相信您的http://23.96.16.121/hotels-api测试方法是问题所在。

我认为您想要做的是编辑您的主机文件以具有如下条目:swsmarthotel360-409bbcc0.hcp.eastus.azmk8s.io 23.96.16.121

然后当你去 swsmarthotel360-409bbcc0.hcp.eastus.azmk8s.io/hotels-api 它会去你的集群。

Ingress 只能通过 L7 地址到达。如果该 hostfile hack 有效,那么您只需要修改 DNS 以使其在没有 hostfile t-shoot hack 的情况下工作。

==================================
(原答案)

我还使用 AKS(Azure 的 Kbuernetes 即服务)答案取决于您在部署集群时指定的选项。

有一个启用 RBAC 是或否的标志(我在您的 YAML 中没有看到 RBAC 语句)还有一个 [HTTP 应用程序路由是或否] 标志。(默认情况下它是打开的,但我们将其关闭,以便我们可以使用我们自己的 DNS 和我们自己的 Ingress)


无论如何,我希望这会为您指明正确的方向:
我建议您创建一个测试集群以了解更多信息并在该测试集群上:

1.) 指定 RBAC 开启和 HTTP 路由关闭

2.) 去这里https://kubernetes.github.io/ingress-nginx/deploy/ 应用强制命令和云通用入口控制器命令。

云通用入口控制器将在 Azure 中生成一个 L4 负载均衡器 VM,将其自动映射到 nodeports 服务,该服务会将其转发到集群中存在的 L7 Nginx LB 服务,这要归功于上面提到的 kubectl apply 命令。L7 Nginx 服务的 pod 由入口控制器 pod 控制,并使用入口对象进行管理/配置。

要对其进行测试,您可以查找 L4 LB 的 IP 地址(kubectl get svc --all-namespaces -o wide)应该会显示它的 IP。您的入口规则之一可能是 mywebsite.com/homepage。所以要测试你可以用 mywebsite.com 之类的条目来编辑你的主机文件

于 2018-09-09T03:00:45.867 回答