kubernetes linkerd Top功能仅显示/healthz请求

dauxcl2d  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(1)|浏览(104)

正在执行Linux Foundation的Kubernetes开发人员课程中的实验7.2.服务网格和入口控制器,但我遇到了一个问题-Top特性仅显示/healthz请求。
它也应该显示/请求。但没有。真的很想排除故障,但我甚至不知道如何接近它。

更多详细信息

按照课程说明,我有:
1.在两个GCE虚拟机上部署一个k8s集群
1.链接器

  1. nginx入口控制器
    1.httpd映像的简单LoadBalancer服务。实际上,这是一个NodePort服务,因为从未预配LoadBalancer。名称为secondapp
    1.路由到secondapp服务的简单入口对象。
    我不知道什么信息对解决问题有用。下面是我可以想到的一些信息:

设定
链接器版本

  1. student@master:~$ linkerd version
  2. Client version: stable-2.11.1
  3. Server version: stable-2.11.1
  4. student@master:~$

nginx入口控制器版本

  1. student@master:~$ helm list
  2. NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
  3. myingress default 1 2022-09-28 02:09:35.031108611 +0000 UTC deployed ingress-nginx-4.2.5 1.3.1
  4. student@master:~$

服务清单

  1. student@master:~$ k get svc
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d4h
  4. myingress-ingress-nginx-controller LoadBalancer 10.106.67.139 <pending> 80:32144/TCP,443:32610/TCP 62m
  5. myingress-ingress-nginx-controller-admission ClusterIP 10.107.109.117 <none> 443/TCP 62m
  6. nginx ClusterIP 10.105.88.244 <none> 443/TCP 3h42m
  7. registry ClusterIP 10.110.129.139 <none> 5000/TCP 3h42m
  8. secondapp LoadBalancer 10.105.64.242 <pending> 80:32000/TCP 111m
  9. student@master:~$

正在验证入口控制器是否为linkerd所知

  1. student@master:~$ k get ds myingress-ingress-nginx-controller -o json | jq .spec.template.metadata.annotations
  2. {
  3. "linkerd.io/inject": "ingress"
  4. }
  5. student@master:~$

第二个应用程序窗格

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: secondapp
  5. labels:
  6. example: second
  7. spec:
  8. containers:
  9. - name: webserver
  10. image: httpd
  11. - name: busy
  12. image: busybox
  13. command:
  14. - sleep
  15. - "3600"

第二个应用程序服务

  1. student@master:~$ k get svc secondapp -o yaml
  2. apiVersion: v1
  3. kind: Service
  4. metadata:
  5. creationTimestamp: "2022-09-28T01:21:00Z"
  6. name: secondapp
  7. namespace: default
  8. resourceVersion: "433221"
  9. uid: 9266f000-5582-4796-ba73-02375f56ce2b
  10. spec:
  11. allocateLoadBalancerNodePorts: true
  12. clusterIP: 10.105.64.242
  13. clusterIPs:
  14. - 10.105.64.242
  15. externalTrafficPolicy: Cluster
  16. internalTrafficPolicy: Cluster
  17. ipFamilies:
  18. - IPv4
  19. ipFamilyPolicy: SingleStack
  20. ports:
  21. - nodePort: 32000
  22. port: 80
  23. protocol: TCP
  24. targetPort: 80
  25. selector:
  26. example: second
  27. sessionAffinity: None
  28. type: LoadBalancer
  29. status:
  30. loadBalancer: {}
  31. student@master:~$

入口对象

  1. student@master:~$ k get ingress
  2. NAME CLASS HOSTS ADDRESS PORTS AGE
  3. ingress-test <none> www.example.com 80 65m
  4. student@master:~$ k get ingress ingress-test -o yaml
  5. apiVersion: networking.k8s.io/v1
  6. kind: Ingress
  7. metadata:
  8. annotations:
  9. kubernetes.io/ingress.class: nginx
  10. creationTimestamp: "2022-09-28T02:20:03Z"
  11. generation: 1
  12. name: ingress-test
  13. namespace: default
  14. resourceVersion: "438934"
  15. uid: 1952a816-a3f3-42a4-b842-deb56053b168
  16. spec:
  17. rules:
  18. - host: www.example.com
  19. http:
  20. paths:
  21. - backend:
  22. service:
  23. name: secondapp
  24. port:
  25. number: 80
  26. path: /
  27. pathType: ImplementationSpecific
  28. status:
  29. loadBalancer: {}
  30. student@master:~$

测试中
第二个应用程序

  1. student@master:~$ curl "$(curl ifconfig.io):$(k get svc secondapp '--template={{(index .spec.ports 0).nodePort}}')"
  2. % Total % Received % Xferd Average Speed Time Time Time Current
  3. Dload Upload Total Spent Left Speed
  4. 100 15 100 15 0 0 340 0 --:--:-- --:--:-- --:--:-- 348
  5. <html><body><h1>It works!</h1></body></html>
  6. student@master:~$

通过入口控制器

  1. student@master:~$ url="$(curl ifconfig.io):$(k get svc myingress-ingress-nginx-controller '--template={{(index .spec.ports 0).nodePort}}')"
  2. % Total % Received % Xferd Average Speed Time Time Time Current
  3. Dload Upload Total Spent Left Speed
  4. 100 15 100 15 0 0 319 0 --:--:-- --:--:-- --:--:-- 319
  5. student@master:~$ curl -H "Host: www.example.com" $url
  6. <html><body><h1>It works!</h1></body></html>
  7. student@master:~$

如果没有Host头文件:

  1. student@master:~$ curl $url
  2. <html>
  3. <head><title>404 Not Found</title></head>
  4. <body>
  5. <center><h1>404 Not Found</h1></center>
  6. <hr><center>nginx</center>
  7. </body>
  8. </html>
  9. student@master:~$

最后是linkerd Jmeter 盘Top快照:

GET /请求在哪里?

编辑1

所以在linkerd上有人建议去www.example.com看看https://linkerd.io/2.12/tasks/using-ingress/#nginx,这让我更仔细地检查了我的pod。结果发现有一个nginx入口pod无法启动,这显然是由于linkerd注入。请注意:

在链接器d之前

  1. student@master:~$ k get pod
  2. NAME READY STATUS RESTARTS AGE
  3. myingress-ingress-nginx-controller-gbmbg 1/1 Running 0 19m
  4. myingress-ingress-nginx-controller-qtdhw 1/1 Running 0 3m6s
  5. secondapp 2/2 Running 4 (13m ago) 12h
  6. student@master:~$

在链接器d之后

  1. student@master:~$ k get ds myingress-ingress-nginx-controller -o yaml | linkerd inject --ingress - | k apply -f -
  2. daemonset "myingress-ingress-nginx-controller" injected
  3. daemonset.apps/myingress-ingress-nginx-controller configured
  4. student@master:~$

检查吊舱:
第一个
我将处理我在linkerd松弛上得到的链接,并用任何新的发现更新这篇文章。

b4wnujal

b4wnujal1#

解决方案是由linkerd 2 slack论坛上的Axenow用户提供的。问题是ingress-nginx无法与它提供入口功能的服务共享名称空间。在我的例子中,所有这些服务都在默认名称空间中。
引用Axenow的话:
当你部署nginx的时候,默认情况下它会直接向pod发送流量。要解决这个问题,你必须进行如下配置:https://linkerd.io/2.12/tasks/using-ingress/#nginx
为了详细说明,必须更新下载的ingress-nginx helm图表的values.yaml文件,以确保以下内容为真:

  1. controller:
  2. replicaCount: 2
  3. service:
  4. externalTrafficPolicy: Cluster
  5. podAnnotations:
  6. linkerd.io/inject: enabled

并将控制器安装在专用命名空间中:

  1. helm upgrade --install --create-namespace --namespace ingress-nginx -f values.yaml ingress-nginx ingress-nginx/ingress-nginx

(当然,已卸载了以前的安装)

展开查看全部

相关问题