San*_*ana 4 google-kubernetes-engine istio kiali
我已经安装了 kiali 运算符并尝试从 Ingress 上的 URL(xxxx/kiali) 加载 UI。以下是我在加载网址时收到的文本。
响应 404(后端 NotFound),[ /kiali/ ] 的服务规则不存在
我的所有集群组件都是绿色的,如下所示。任何想法 ?
我遇到了同样的问题,最后成功了。经过一些比较测试和大量的困惑之后,以下是发生的情况以及如何解决它:
pathType提供了一个示例 ingress yaml,其中包含一个仅在 GKE 1.18 及更高版本上可用的新属性:kind: Ingress
...
- host: my-kiali.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: kiali
...
Run Code Online (Sandbox Code Playgroud)
现在,GKE 1.18 仅在 GCP 的 RAPID 发布渠道中可用。对于 GCP 控制台中默认的 REGULAR 通道,目前最高版本为 GKE 1.17。如果是这样,很明显会注意到并修复,因为 1.17kubectl apply会抱怨语法错误。不明显的是,在 1.17 及更早版本中,我们需要附加一个通配符,path以便它显示:
- path: /*
Run Code Online (Sandbox Code Playgroud)
如果没有通配符*,ingress将向浏览器返回您提到的错误消息(此请求的 HTTP 回复状态代码确实是文本正文中建议的 404):
response 404 (backend NotFound), service rules for [ /kiali/ ] non-existent
Run Code Online (Sandbox Code Playgroud)
这是简单的部分,可以回答您的问题(希望如此)。现在进入下一个问题,尽管它并不是您问题的一部分......
kubectl apply ...。然后,我们需要等待几分钟,让 GCP 创建外部负载均衡器。各种互联网文献都说要等到分配外部IP地址——您可以在负载均衡器的GCP控制台上检查,或者:$ kubectl describe ingress istio-system -n istio-system | grep Address
Run Code Online (Sandbox Code Playgroud)
但我认为这还不够——而且这种现象并不局限于 Istio。分配IP地址后,您还需要进一步等待GCP报告所有后端健康检查都处于HEALTHY状态。您可以在 CLI 中检查它:
$ kubectl get ingress istio-system -n istio-system -o yaml | grep ingress.kubernetes.io/backends
ingress.kubernetes.io/backends: '{...,"k8s1-898cbc37-istio-system-kiali-20001-dfe8fc73":"HEALTHY",...}'
Run Code Online (Sandbox Code Playgroud)
额外的等待时间是多长?对我来说,从分配IP到后端健康,花了7分钟:
$ kubectl describe ingress istio-system -n istio-system
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ADD ... loadbalancer-controller istio-system/istio-system
Normal CREATE 7m21s loadbalancer-controller ip: 34.120.142.25
Run Code Online (Sandbox Code Playgroud)
尽管要readinessProbe短得多:
$ cat istio-1.7.4/samples/addons/kiali.yaml
...
readinessProbe:
httpGet:
...
initialDelaySeconds: 5
periodSeconds: 30
Run Code Online (Sandbox Code Playgroud)
实际等待和等待之间的巨大差异periodSeconds可能会在操作过程中造成相当大的混乱。
当浏览器尝试访问http://my-kiali.io(顺便说一句,必须将该主机名添加到C:\Windows\System32\drivers\etc\hosts)时,浏览器在等待的不同阶段将经历以下情况:
在 7 分钟等待的大部分时间(分配 IP 后),浏览器将收到 HTTP 404。请注意,这与您的问题中的错误不同。这里的 404 是第一个 URL http://my-kiali.io/的 HTTP 状态,这意味着后端不处于健康状态——HTTP 请求从未到达 Kiali pod。相比之下,您的 404 实际上前面有一个 HTTP 302(从 重定向/到/kiali/),这意味着后端是健康的(这就是 HTTP 302 回复/重定向的生成方式——由 Kiali pod 生成),但负载均衡器找不到重定向 URL 路径的转发规则/kiali/(因为该规则缺少通配符*)。
在 7 分钟的等待即将结束时,浏览器可能会短暂收到 HTTP 502(“错误网关”)。这只是负载均衡器正在转换时的情况。
7 分钟等待后,浏览器将首先收到 HTTP 302(“重定向”),该 HTTP 302 重定向自/to /kiali/,然后是 HTTP 200(成功重定向后)。Kiali GUI 控制台成功显示在浏览器上。
问题解决了!
PS:如果您确实遵循 Istio官方教程,您可能会遇到其他 2 个(不相关的)错误:
a)timeoutSeconds对比periodSeconds:
Error during sync: error running backend syncing routine: googleapi: Error 400: Invalid value for field 'resource.timeoutSec': '30'. TimeoutSec should be less than checkIntervalSec., invalid
Run Code Online (Sandbox Code Playgroud)
解决方案是编辑所有内容,istio-1.7.4/samples/addons/*.yaml使其timeoutSeconds小于periodSeconds。
b)servicePort进入my-istio-tracing.io。本教程kind: Ingress中显示的示例的端口号错误。正确的端口号应该是:80
response 404 (backend NotFound), service rules for [ /kiali/ ] non-existent
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6856 次 |
| 最近记录: |