AKS 入口控制器未重定向到 SmartHotel360 服务
AKS ingress controller not redirecting to SmartHotel360 services
我正在努力在 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)
再次阅读您的问题:
- 主机:swsmarthotel360-409bbcc0.hcp.eastus.azmk8s.io
网址:
路径:
- 路径:/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 地址到达。
如果该主机文件 hack 有效,那么您只需要修改 DNS 即可使其在没有主机文件 t-shoot hack 的情况下工作。
=================================
(原答案)
我也使用 AKS(Azure 的 Kbuernetes 即服务)
答案取决于您在部署集群时指定的选项。
有启用 RBAC 是或否的标志(我在你的 YAML 中没有看到 RBAC 语句)
还有一个 [HTTP application routing yes or no] 标志。 (默认情况下它是打开的,但我们将其关闭以便我们可以使用我们自己的 DNS 和我们自己的 Ingress)
无论如何,我希望这能为您指明正确的方向:
我建议您创建一个测试集群以了解更多信息并在该测试集群上:
1.) 指定 RBAC 打开和 HTTP 路由关闭
2.) 到这里 https://kubernetes.github.io/ingress-nginx/deploy/
应用强制命令和云通用入口控制器命令。
云通用入口控制器将
在 Azure 中生成一个 L4 负载均衡器 VM,将其自动映射到 nodeports 服务,这将通过上面提到的 kubectl apply 命令将其转发到集群中存在的 L7 Nginx LB 服务。 L7 Nginx 服务的 pods 由入口控制器 pod 控制,并且 managed/configuring 使用入口对象。
要测试它,您可以查找 L4 LB 的 IP 地址(kubectl get svc --all-namespaces -o wide)应该会显示它的 IP。您的入口规则之一可能是 mywebsite.com/homepage。
所以要测试你可以用像这样的条目编辑你的主机文件
mywebsite.com
我正在努力在 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)
再次阅读您的问题: - 主机:swsmarthotel360-409bbcc0.hcp.eastus.azmk8s.io 网址: 路径: - 路径:/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 地址到达。 如果该主机文件 hack 有效,那么您只需要修改 DNS 即可使其在没有主机文件 t-shoot hack 的情况下工作。
=================================
(原答案)
我也使用 AKS(Azure 的 Kbuernetes 即服务) 答案取决于您在部署集群时指定的选项。
有启用 RBAC 是或否的标志(我在你的 YAML 中没有看到 RBAC 语句) 还有一个 [HTTP application routing yes or no] 标志。 (默认情况下它是打开的,但我们将其关闭以便我们可以使用我们自己的 DNS 和我们自己的 Ingress)
无论如何,我希望这能为您指明正确的方向:
我建议您创建一个测试集群以了解更多信息并在该测试集群上:
1.) 指定 RBAC 打开和 HTTP 路由关闭
2.) 到这里 https://kubernetes.github.io/ingress-nginx/deploy/ 应用强制命令和云通用入口控制器命令。
云通用入口控制器将 在 Azure 中生成一个 L4 负载均衡器 VM,将其自动映射到 nodeports 服务,这将通过上面提到的 kubectl apply 命令将其转发到集群中存在的 L7 Nginx LB 服务。 L7 Nginx 服务的 pods 由入口控制器 pod 控制,并且 managed/configuring 使用入口对象。
要测试它,您可以查找 L4 LB 的 IP 地址(kubectl get svc --all-namespaces -o wide)应该会显示它的 IP。您的入口规则之一可能是 mywebsite.com/homepage。 所以要测试你可以用像这样的条目编辑你的主机文件 mywebsite.com