【问题标题】:can't get product page from outside using browser via istio无法通过 istio 使用浏览器从外部获取产品页面
【发布时间】:2021-06-17 08:34:14
【问题描述】:

嘿,让示例书应用程序运行已经有好几天了。我是 istio 的新手,并试图理解它。我遵循了demo 的另一种设置 bookinfo 的方法。我在以 docker 作为驱动程序的虚拟机中使用 minikube。我将 metalLB 设置为 ingress-gateway 的 loadBalancer,这是我用于 metalLB 的配置图:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: custom-ip-space
      protocol: layer2
      addresses:
      - 192.168.49.2/28

192.168.49.2 是命令的结果:minikube ip

ingressgateway yaml 文件:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
        - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
    - "*"
  gateways:
    - bookinfo-gateway
  http:
    - route:
        - destination:
            host: productpage
            port:
              number: 9080

以及kubectl get svc -n istio-system的输出命令:


NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)                                                                                                                                      AGE
grafana                  ClusterIP      10.111.105.179   <none>         3000/TCP                                                                                                                                     34m
istio-citadel            ClusterIP      10.100.38.218    <none>         8060/TCP,15014/TCP                                                                                                                           34m
istio-egressgateway      ClusterIP      10.101.66.207    <none>         80/TCP,443/TCP,15443/TCP                                                                                                                     34m
istio-galley             ClusterIP      10.103.112.155   <none>         443/TCP,15014/TCP,9901/TCP                                                                                                                   34m
istio-ingressgateway     LoadBalancer   10.97.23.39      192.168.49.0   15020:32717/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:32199/TCP,15030:30010/TCP,15031:30189/TCP,15032:31134/TCP,15443:30748/TCP   34m
istio-pilot              ClusterIP      10.108.133.31    <none>         15010/TCP,15011/TCP,8080/TCP,15014/TCP                                                                                                       34m
istio-policy             ClusterIP      10.100.74.207    <none>         9091/TCP,15004/TCP,15014/TCP                                                                                                                 34m
istio-sidecar-injector   ClusterIP      10.97.224.99     <none>         443/TCP,15014/TCP                                                                                                                            34m
istio-telemetry          ClusterIP      10.101.165.139   <none>         9091/TCP,15004/TCP,15014/TCP,42422/TCP                                                                                                       34m
jaeger-agent             ClusterIP      None             <none>         5775/UDP,6831/UDP,6832/UDP                                                                                                                   34m
jaeger-collector         ClusterIP      10.111.188.83    <none>         14267/TCP,14268/TCP,14250/TCP                                                                                                                34m
jaeger-query             ClusterIP      10.103.148.144   <none>         16686/TCP                                                                                                                                    34m
kiali                    ClusterIP      10.111.57.222    <none>         20001/TCP                                                                                                                                    34m
prometheus               ClusterIP      10.107.204.95    <none>         9090/TCP                                                                                                                                     34m
tracing                  ClusterIP      10.104.88.173    <none>         80/TCP                                                                                                                                       34m
zipkin                   ClusterIP      10.111.162.93    <none>         9411/TCP                                                                                                                                     34m

当我尝试 curl 192.168.49.0:80/productpage 时,我得到了:

*   Trying 192.168.49.0...
* TCP_NODELAY set
* Immediate connect fail for 192.168.49.0: Network is unreachable
* Closing connection 0
curl: (7) Couldn't connect to server
myhost@k8s:~$ curl 192.168.49.0:80/productpage
curl: (7) Couldn't connect to server

在设置 metalLB 之前,我被拒绝连接!

请问有什么解决办法吗?因为已经 5 天努力修复它。

我按照here的步骤,所有步骤都ok!

【问题讨论】:

  • 网络不可达意味着您没有网络接口或功能。连接被拒绝是一个完全不同的问题。不相关。
  • 我能知道使用旧版本 Istio 的原因吗?
  • @Nandan 老实说,我不知道安装了哪个版本的 istio,我认为是最新版本

标签: kubernetes istio minikube


【解决方案1】:

在我看来,这是MetalLB 配置的问题。

您正试图让 MetalLB 控制来自 192.168.49.2/28 网络的 IP。
我们可以计算 192.168.49.2/28 网络:HostMin=192.168.49.1HostMax=192.168.49.14

正如我们所见,您的istio-ingressgateway LoadBalancer 服务被分配了地址192.168.49.0,我认为这是问题的原因。

我建议将192.168.49.2/28 更改为一个范围,例如192.168.49.10-192.168.49.20


我创建了一个示例来说明如何更改配置。

如你所见,一开始我的配置和你一模一样(我也无法使用curl 命令连接到服务器):

$ kubectl get svc -n istio-system istio-ingressgateway
NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP                                                                                                                                       
istio-ingressgateway   LoadBalancer   10.109.75.19   192.168.49.0    


$ curl 192.168.49.0:80/productpage
curl: (7) Couldn't connect to server

首先,我修改了configConfigMap
注意:我将192.168.49.2/28更改为192.168.49.10-192.168.49.20

$ kubectl edit cm config -n metallb-system 

然后我重新启动了所有控制器和扬声器Pods 以强制MetalLB 使用新配置(请参阅:Metallb ConfigMap update)。

$ kubectl delete pod -n metallb-system --all      
pod "controller-65db86ddc6-gf49h" deleted
pod "speaker-7l66v" deleted

一段时间后,我们应该会看到一个新的EXTERNAL-IP 分配给了istio-ingressgateway Service

kubectl get svc -n istio-system istio-ingressgateway
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP                                                                                                                                         AGE
istio-ingressgateway   LoadBalancer   10.106.170.227   192.168.49.10  

最后,我们可以检查它是否按预期工作:

$ curl 192.168.49.10:80/productpage                   
<!DOCTYPE html>
<html>
  <head>
    <title>Simple Bookstore App</title>
...

【讨论】:

  • 感谢您的回答,我测试了您的配置,它在我的虚拟机中使用curl 命令运行,当我切换到 Windows(我的主机)以访问它不起作用的网页时(我将虚拟机的网络从 NAT 更改为桥接,以便能够访问 192.168.49.10/productpage )。然后我在 Windows 中切换到 docker 桌面并安装了 MetalLB,但在相同的配置下也无法正常工作。此外,在 Windows 操作系统中安装 istio 时,我已经在 'EXTERNAL_IP' localhost 中的 ingressgateway 中,仍然无法访问 url
  • minikube 是为了在本地运行 Kubernetes 而创建的。如果我认为正确,您应该使用端口/ssh 转发来访问 minikube 在其上运行的机器之外的此 IP(请参阅:minikube access from outside network
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-30
  • 2016-03-16
  • 1970-01-01
  • 2012-01-02
相关资源
最近更新 更多