【问题标题】:Unable to view kiali dashboard无法查看 kiali 仪表板
【发布时间】:2020-09-11 14:32:36
【问题描述】:

我通过以下步骤安装了 Istion 1.6.9 版

Install Istio Version 1.6.9
wget https://github.com/istio/istio/releases/download/1.6.9/istio-1.6.9-linux-amd64.tar.gz
tar -xzvf istio-1.6.9-linux-amd64.tar.gz
cd istio-1.6.9
cd bin/
sudo mv istioctl /usr/local/bin/
istioctl --version
istioctl install --set profile=demo

我想访问 kiali 仪表板,但我不知道如何访问!

我可以看到 kiali 正在 pod 中运行:

kubectl get pods -n istio-system
NAME                                    READY   STATUS    RESTARTS   AGE
grafana-5dc4b4676c-wcb59                1/1     Running   0          32h
istio-egressgateway-5889bb8976-stlqd    1/1     Running   0          32h
istio-ingressgateway-699d97bdbf-w6x46   1/1     Running   0          32h
istio-tracing-8584b4d7f9-p66wh          1/1     Running   0          32h
istiod-86d4497c9-xv2km                  1/1     Running   0          32h
kiali-6f457f5964-6sssn                  1/1     Running   0          32h
prometheus-5d64cf8b79-2kdww             2/2     Running   0          32h

我也可以将 kiali 视为服务:

kubectl get svc -n istio-system
NAME                        TYPE           CLUSTER-IP       EXTERNAL-IP                                                                    PORT(S)                                                                      AGE
grafana                     ClusterIP      10.100.101.71    <none>                                                                         3000/TCP                                                                     32h
istio-egressgateway         ClusterIP      10.100.34.75     <none>                                                                         80/TCP,443/TCP,15443/TCP                                                     32h
istio-ingressgateway        LoadBalancer   10.100.84.203    a736b038af6b5478087f0682ddb4dbbb-1317589033.ap-southeast-2.elb.amazonaws.com   15021:31918/TCP,80:32736/TCP,443:30611/TCP,31400:30637/TCP,15443:31579/TCP   32h
istiod                      ClusterIP      10.100.111.159   <none>                                                                         15010/TCP,15012/TCP,443/TCP,15014/TCP,853/TCP                                32h
jaeger-agent                ClusterIP      None             <none>                                                                         5775/UDP,6831/UDP,6832/UDP                                                   32h
jaeger-collector            ClusterIP      10.100.84.202    <none>                                                                         14267/TCP,14268/TCP,14250/TCP                                                32h
jaeger-collector-headless   ClusterIP      None             <none>                                                                         14250/TCP                                                                    32h
jaeger-query                ClusterIP      10.100.165.216   <none>                                                                         16686/TCP                                                                    32h
kiali                       ClusterIP      10.100.159.127   <none>                                                                         20001/TCP                                                                    32h
prometheus                  ClusterIP      10.100.113.255   <none>                                                                         9090/TCP                                                                     32h
tracing                     ClusterIP      10.100.77.39     <none>                                                                         80/TCP                                                                       32h
zipkin                      ClusterIP      10.100.247.201   <none>                                                                         9411/TCP

我还可以看到秘密也部署如下:

kubectl get secrets
NAME                                       TYPE                                  DATA   AGE
default-token-ghz6r                        kubernetes.io/service-account-token   3      8d
sh.helm.release.v1.aws-efs-csi-driver.v1   helm.sh/release.v1                    1      6d
[centos@ip-10-0-0-61 ~]$ kubectl get secrets -n istio-system
NAME                                               TYPE                                  DATA   AGE
default-token-z6t2v                                kubernetes.io/service-account-token   3      32h
istio-ca-secret                                    istio.io/ca-root                      5      32h
istio-egressgateway-service-account-token-c8hfp    kubernetes.io/service-account-token   3      32h
istio-ingressgateway-service-account-token-fx65w   kubernetes.io/service-account-token   3      32h
istio-reader-service-account-token-hxsll           kubernetes.io/service-account-token   3      32h
istiod-service-account-token-zmtsv                 kubernetes.io/service-account-token   3      32h
kiali                                              Opaque                                2      32h
kiali-service-account-token-82gk7                  kubernetes.io/service-account-token   3      32h
prometheus-token-vs4f6                             kubernetes.io/service-account-token   3      32h

我在我的 Linux 堡垒主机上运行了所有上述命令,我希望如果我在我的 Linux 堡垒和 SG 上打开端口 20001,我应该能够访问它的管理员/管理员凭据?如下:

http://10.100.159.127:20001/

我的第二个问题是 ISTIO,因为该软件在我的 Linux Bastion Server 或 EKS Cluster 上运行? 我的感觉是它在本地 Bastion Server 上运行,但是由于我们使用了以下命令

kubectl label ns default istio-injection=enabled
kubectl get ns
kubectl label ns jenkins istio-injection=enabled
kubectl label ns spinnaker istio-injection=enabled

在这些命名空间中运行的任何 pod 都会自动注入 Envoy 代理 pod,对吗?

P.S:我做了以下:

nohup istioctl dashboard kiali &

在 SG 级别和操作系统级别也打开了端口...仍然无法访问 Kiali 仪表板

http://3.25.217.61:40235/kiali
[centos@ip-10-0-0-61 ~]$ wget http://3.25.217.61:40235/kiali
--2020-09-11 15:56:18--  http://3.25.217.61:40235/kiali
Connecting to 3.25.217.61:40235... failed: Connection refused.

curl ifconfig.co
3.25.217.61

sudo netstat -nap|grep 40235
tcp        0      0 127.0.0.1:40235         0.0.0.0:*               LISTEN      29654/istioctl
tcp6       0      0 ::1:40235               :::*                    LISTEN      29654/istioctl

真的,无法理解出了什么问题……

【问题讨论】:

    标签: istio kiali


    【解决方案1】:

    只需运行istioctl dashboard kiali。

    Istioctl 将创建一个代理。现在使用管理员/管理员凭据登录。

    回答第二个问题: Istio 正在您的集群上运行,并使用 istioctl 进行配置,安装在您的堡垒上。

    通过使用istio-injection=enabled 标记命名空间,边车将被自动注入。如有必要,您可以通过如下注释来禁用对 pod 的注入:

    spec:
      selector:
        matchLabels:
          ...
      template:
        metadata:
          labels:
            ...
          annotations:
            sidecar.istio.io/inject: "false"
    

    更新

    要在没有 istioctl/kubectl 代理的情况下访问 kiali,您有三个选项。如您所见,这取决于 kiali 服务类型:

    1. ClusterIP(默认)

    要使用默认值,请设置从网关到 kiali 服务的路由。这是使用VirtualService 和DestinationRule 完成的。您可以通过 &lt;ingress-gateway-loadbalancer-id&gt;.amazonaws.com/kiali 访问 kiali

    1. 节点端口

    您可以通过在 istio 安装上设置相应的值来将 type 更改为NodePort,并通过&lt;ingress-gateway-loadbalancer-id>.amazonaws.com:20001/kiali 访问 kiali``

    1. 负载平衡器

    您可以通过在 istio 安装时设置相应的值来将 type 更改为 LoadBalancer。将在 aws 上创建第二个弹性负载均衡器,并且 kiali 服务将有一个外部 ip,就像 ingressgateway 服务一样。您现在可以通过&lt;kiali-loadbalancer-id&gt;.amazonaws.com/kiali访问它

    我会推荐选项 1。这是生产的最佳实践,您不必深入研究 istio 安装配置,这在开始时可能会让人不知所措。

    【讨论】:

    • 如果您运行istioctl dashboard kiali 命令,您将获得一个地址,例如http://localhost:20001/kiali。在堡垒的浏览器中打开该网址。如果您想通过入口外部 ip 访问它,您需要将 kiali 服务更改为输入NodePort 或使用VirtualService 创建路由。 3.25.217.61 是您的堡垒 ip 还是 eks 集群 ip?
    • 您也可以在堡垒浏览器上运行kubectl port-forward kiali-&lt;id&gt; 20001:20001 并访问localhost:20001。这正是 istioctl 命令所做的。但在这两种方式中,它都只能从你的堡垒内部访问。
    • 我的堡垒 Linux 服务器位于公共子网上的 AWS 服务器上。
    • 3.25.217.61 是我的 Linux Bastion Server 的 IP。它在 AWS 上。 EKS 集群是从此 VM 启动的。 EKS 集群不在此网络 (VPC) 中。
    • 我现在明白了,因为它是一个“ClusterIP”,我不能从我的浏览器访问它?它也不能是 NodePort 类型。它必须是一个 LoadBalancer 服务,如果我错了,请纠正我。
    【解决方案2】:

    通过以下命令检查 kiali 服务的端口及其类型。

    kubectl get svc -n istio-system
    

    如果类型是 NodePort 那么你可以检查 localhost:(kiali 服务的端口) 否则如果类型是 clusterIP 那么你必须通过转发来暴露它。

    通过 Kubernetes 端口转发或网关公开 Kiali。以下转发命令会在 localhost 端口 20001 上公开 Kiali:

    kubectl -n istio-system port-forward svc/kiali 20001:20001 &
    

    然后检查 localhost:20001 的 kiali 仪表板。

    【讨论】:

      【解决方案3】:

      使用 Kubernetes:https://{domain 或 ingress ip}/kiali

      kubectl get ingress kiali -n istio-system -o jsonpath='{.status.loadBalancer.ingress[0].ip}'
      

      或者(对于任何类型的平台)

      oc port-forward svc/kiali 20001:20001 -n istio-system
      
      kubectl port-forward svc/kiali 20001:20001 -n istio-system
      
      kubectl  port-forward  $(kubectl get pod -n istio-system -l app=kiali   -o jsonpath='{.items[0].metadata.name}')   -n istio-system 20001
      

      【讨论】:

        猜你喜欢
        • 2020-05-21
        • 2014-06-24
        • 2021-04-10
        • 1970-01-01
        • 2017-01-30
        • 1970-01-01
        • 2014-10-05
        • 2016-12-03
        • 1970-01-01
        相关资源
        最近更新 更多