Proxy 如何通过kubectl代理访问此Kubernetes服务?

Proxy 如何通过kubectl代理访问此Kubernetes服务?,proxy,kubernetes,kubectl,Proxy,Kubernetes,Kubectl,我想通过访问我的Grafana Kubernetes服务,但由于某些原因,它无法工作,即使我可以让它用于其他服务。鉴于以下服务定义,为什么它在上不可用 grafana-service.yaml grafana-deployment.yaml 访问上述URL时,我看到的错误是“没有可用于服务的端点”grafana“,错误代码503。您的部署可能没有标签app:grafana,或者位于另一个命名空间中。您还可以发布部署定义吗 有几个因素可能会导致这个问题 该服务期望找到一个或多个支持端点,它通过标签

我想通过访问我的Grafana Kubernetes服务,但由于某些原因,它无法工作,即使我可以让它用于其他服务。鉴于以下服务定义,为什么它在上不可用

grafana-service.yaml grafana-deployment.yaml
访问上述URL时,我看到的错误是“没有可用于服务的端点”grafana“,错误代码503。

您的部署可能没有标签app:grafana,或者位于另一个命名空间中。您还可以发布部署定义吗

有几个因素可能会导致这个问题

  • 该服务期望找到一个或多个支持端点,它通过标签上的匹配规则来发现这些端点。如果标签不对齐,则服务将找不到端点,服务执行的网络网关功能将导致503

  • POD声明的端口和容器内的进程与服务所期望的
    --目标端口
    不一致

  • 其中任何一个都可能产生错误。让我们仔细看一看。 首先,
    kubectl描述服务:

    $ kubectl describe svc grafana01-grafana-3000
    Name:           grafana01-grafana-3000
    Namespace:      default
    Labels:         app=grafana01-grafana
                chart=grafana-0.3.7
                component=grafana
                heritage=Tiller
                release=grafana01
    Annotations:        <none>
    Selector:       app=grafana01-grafana,component=grafana,release=grafana01
    Type:           NodePort
    IP:         10.0.0.197
    Port:           <unset> 3000/TCP
    NodePort:       <unset> 30905/TCP
    Endpoints:      10.1.45.69:3000
    Session Affinity:   None
    Events:         <none>
    
    接下来让我们看看选择器。在上面的示例中,您可以看到我的服务上有3个选择器标签:

    Selector:       app=grafana01-grafana,component=grafana,release=grafana01
    
    接下来我将
    kubectl描述我的播客:

    $ kubectl describe pod grafana
    Name:       grafana01-grafana-1843344063-vp30d
    Namespace:  default
    Node:       10.10.25.220/10.10.25.220
    Start Time: Fri, 14 Jul 2017 03:25:11 +0000
    Labels:     app=grafana01-grafana
            component=grafana
            pod-template-hash=1843344063
            release=grafana01
    ...
    
    请注意,
    pod
    上的标签正确对齐,因此我的服务找到了
    pod
    ,它们提供了
    端点
    ,这些端点由
    服务
    进行负载平衡。验证链的这一部分在您的环境中没有被破坏

    如果您确实发现标签是正确的,则可能仍然存在断开连接,因为在
    pod
    中的
    容器中运行的grafana进程在与您预期不同的端口上运行

    $ kubectl describe pod grafana
    Name:       grafana01-grafana-1843344063-vp30d
    ...
    Containers:
      grafana:
        Container ID:   docker://69f11b7828c01c5c3b395c008d88e8640c5606f4d865107bf4b433628cc36c76
        Image:      grafana/grafana:latest
        Image ID:       docker-pullable://grafana/grafana@sha256:11690015c430f2b08955e28c0e8ce7ce1c5883edfc521b68f3fb288e85578d26
        Port:       3000/TCP
        State:      Running
          Started:      Fri, 14 Jul 2017 03:25:26 +0000
    
    如果出于某种原因,容器下的
    端口
    列出了不同的值,则服务可以有效地针对无效端点进行负载平衡

    例如,如果它列出了端口80: 端口:80/TCP 或者是一个空值 端口:

    然后,即使您的标签选择器是正确的,服务也永远不会从pod中找到有效的响应,并且会从循环中删除端点

    我怀疑您的问题是上述第一个问题(标签选择器不匹配)


    如果标签选择器和端口都对齐,则节点之间的MTU设置可能有问题。在某些情况下,如果您的网络层(如calico)使用的MTU大于支持网络的MTU,那么您将永远无法从端点获得有效响应。通常,最后一个潜在问题将显示为超时,而不是503

    正如Michael所说,很可能您的标签或名称空间不匹配。但是,除此之外,请记住,即使在修复端点时,您要查找的url()也可能无法正常工作

    根据您的根url和/或静态根路径grafana配置设置,尝试登录时,您可能会让grafana尝试发布到并获得404

    尝试改用kubectl端口转发:

    kubectl-n向前监测端口[grafana吊舱名称]3000

    然后通过


    问题是Grafana的端口名为web,因此需要将
    :web
    附加到kubectl代理URL:


    另一种方法是不命名Grafana端口,因为这样您就不必将
    :web
    附加到服务的kubectl代理URL:。我最终选择了这个选项,因为它更简单。

    对于Kubernetes 1.10,代理URL应该有细微的不同,如下所示:

    http://localhost:8080/api/v1/namespaces/default/services/SERVICE-NAME:PORT-NAME/proxy/ 
    

    Ref:

    嘿,对不起,我回复你的速度太慢了,但我现在发布了部署清单!在此期间,我不得不专注于其他事情。我不知道为什么,但我无法在AKS上使用这种模式。相反,我必须遵循这种模式(最后是代理):这是因为服务端点是更新的
    $ kubectl describe pod grafana
    Name:       grafana01-grafana-1843344063-vp30d
    Namespace:  default
    Node:       10.10.25.220/10.10.25.220
    Start Time: Fri, 14 Jul 2017 03:25:11 +0000
    Labels:     app=grafana01-grafana
            component=grafana
            pod-template-hash=1843344063
            release=grafana01
    ...
    
    $ kubectl describe pod grafana
    Name:       grafana01-grafana-1843344063-vp30d
    ...
    Containers:
      grafana:
        Container ID:   docker://69f11b7828c01c5c3b395c008d88e8640c5606f4d865107bf4b433628cc36c76
        Image:      grafana/grafana:latest
        Image ID:       docker-pullable://grafana/grafana@sha256:11690015c430f2b08955e28c0e8ce7ce1c5883edfc521b68f3fb288e85578d26
        Port:       3000/TCP
        State:      Running
          Started:      Fri, 14 Jul 2017 03:25:26 +0000
    
    http://localhost:8080/api/v1/namespaces/default/services/SERVICE-NAME:PORT-NAME/proxy/