【发布时间】:2022-10-08 04:34:26
【问题描述】:
正在做实验室 7.2。服务网格和入口控制器来自 Linux Foundation 的 Kubernetes 开发人员课程,我面临一个问题 - 顶部功能仅显示 /healthz 请求。
它也应该显示 / 请求。但没有。真的很想解决它,但我什至不知道如何解决它。
更多细节
按照我的课程说明:
- 部署在两个 GCE 虚拟机上的 k8s 集群
- 链接器
- nginx 入口控制器
- 一个简单的 LoadBalancer 服务关闭httpd图片。实际上,这是一个 NodePort 服务,因为从未配置过 LoadBalancer。名字是第二个应用程序
- 一个简单的入口对象路由到 secondapp 服务。
我不知道哪些信息对解决问题有用。以下是我能想到的一些:
设置
Linkerd 版本
student@master:~$ linkerd version Client version: stable-2.11.1 Server version: stable-2.11.1 student@master:~$nginx入口控制器版本
student@master:~$ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION myingress default 1 2022-09-28 02:09:35.031108611 +0000 UTC deployed ingress-nginx-4.2.5 1.3.1 student@master:~$服务清单
student@master:~$ k get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d4h myingress-ingress-nginx-controller LoadBalancer 10.106.67.139 <pending> 80:32144/TCP,443:32610/TCP 62m myingress-ingress-nginx-controller-admission ClusterIP 10.107.109.117 <none> 443/TCP 62m nginx ClusterIP 10.105.88.244 <none> 443/TCP 3h42m registry ClusterIP 10.110.129.139 <none> 5000/TCP 3h42m secondapp LoadBalancer 10.105.64.242 <pending> 80:32000/TCP 111m student@master:~$验证入口控制器是否为 linkerd 所知
student@master:~$ k get ds myingress-ingress-nginx-controller -o json | jq .spec.template.metadata.annotations { "linkerd.io/inject": "ingress" } student@master:~$第二个应用程序 pod
apiVersion: v1 kind: Pod metadata: name: secondapp labels: example: second spec: containers: - name: webserver image: httpd - name: busy image: busybox command: - sleep - "3600"第二个app服务
student@master:~$ k get svc secondapp -o yaml apiVersion: v1 kind: Service metadata: creationTimestamp: "2022-09-28T01:21:00Z" name: secondapp namespace: default resourceVersion: "433221" uid: 9266f000-5582-4796-ba73-02375f56ce2b spec: allocateLoadBalancerNodePorts: true clusterIP: 10.105.64.242 clusterIPs: - 10.105.64.242 externalTrafficPolicy: Cluster internalTrafficPolicy: Cluster ipFamilies: - IPv4 ipFamilyPolicy: SingleStack ports: - nodePort: 32000 port: 80 protocol: TCP targetPort: 80 selector: example: second sessionAffinity: None type: LoadBalancer status: loadBalancer: {} student@master:~$入口对象
student@master:~$ k get ingress NAME CLASS HOSTS ADDRESS PORTS AGE ingress-test <none> www.example.com 80 65m student@master:~$ k get ingress ingress-test -o yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx creationTimestamp: "2022-09-28T02:20:03Z" generation: 1 name: ingress-test namespace: default resourceVersion: "438934" uid: 1952a816-a3f3-42a4-b842-deb56053b168 spec: rules: - host: www.example.com http: paths: - backend: service: name: secondapp port: number: 80 path: / pathType: ImplementationSpecific status: loadBalancer: {} student@master:~$测试
第二个应用程序
student@master:~$ curl "$(curl ifconfig.io):$(k get svc secondapp '--template={{(index .spec.ports 0).nodePort}}')" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15 100 15 0 0 340 0 --:--:-- --:--:-- --:--:-- 348 <html><body><h1>It works!</h1></body></html> student@master:~$通过入口控制器
student@master:~$ url="$(curl ifconfig.io):$(k get svc myingress-ingress-nginx-controller '--template={{(index .spec.ports 0).nodePort}}')" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 15 100 15 0 0 319 0 --:--:-- --:--:-- --:--:-- 319 student@master:~$ curl -H "Host: www.example.com" $url <html><body><h1>It works!</h1></body></html> student@master:~$并且没有
Host标头:student@master:~$ curl $url <html> <head><title>404 Not Found</title></head> <body> <center><h1>404 Not Found</h1></center> <hr><center>nginx</center> </body> </html> student@master:~$GET /请求在哪里?编辑 1
因此,在 linkerd slack 上,有人建议查看 https://linkerd.io/2.12/tasks/using-ingress/#nginx,这让我更仔细地检查了我的 pod。事实证明,其中一个 nginx-ingress pod 无法启动,这显然是由于 linkerd 注入造成的。请注意:
在链接器之前
student@master:~$ k get pod NAME READY STATUS RESTARTS AGE myingress-ingress-nginx-controller-gbmbg 1/1 Running 0 19m myingress-ingress-nginx-controller-qtdhw 1/1 Running 0 3m6s secondapp 2/2 Running 4 (13m ago) 12h student@master:~$链接后
student@master:~$ k get ds myingress-ingress-nginx-controller -o yaml | linkerd inject --ingress - | k apply -f - daemonset "myingress-ingress-nginx-controller" injected daemonset.apps/myingress-ingress-nginx-controller configured student@master:~$并检查豆荚:
student@master:~$ k get pod NAME READY STATUS RESTARTS AGE myingress-ingress-nginx-controller-gbmbg 1/1 Running 0 40m myingress-ingress-nginx-controller-xhj5m 1/2 Running 8 (5m59s ago) 17m secondapp 2/2 Running 4 (34m ago) 12h student@master:~$student@master:~$ k describe pod myingress-ingress-nginx-controller-xhj5m |tail Normal Created 19m kubelet Created container linkerd-proxy Normal Started 19m kubelet Started container linkerd-proxy Normal Pulled 18m (x2 over 19m) kubelet Container image "registry.k8s.io/ingress-nginx/controller:v1.3.1@sha256:54f7fe2c6c5a9db9a0ebf1131797109bb7a4d91f56b9b362bde2abd237dd1974" already present on machine Normal Created 18m (x2 over 19m) kubelet Created container controller Normal Started 18m (x2 over 19m) kubelet Started container controller Warning FailedPreStopHook 18m kubelet Exec lifecycle hook ([/wait-shutdown]) for Container "controller" in Pod "myingress-ingress-nginx-controller-xhj5m_default(93dd0189-091f-4c56-a197-33991932d66d)" failed - error: command '/wait-shutdown' exited with 137: , message: "" Warning Unhealthy 18m (x6 over 19m) kubelet Readiness probe failed: HTTP probe failed with statuscode: 502 Normal Killing 18m kubelet Container controller failed liveness probe, will be restarted Warning Unhealthy 14m (x30 over 19m) kubelet Liveness probe failed: HTTP probe failed with statuscode: 502 Warning BackOff 4m29s (x41 over 14m) kubelet Back-off restarting failed container student@master:~$我将处理我在 linkerd slack 上获得的链接,并用任何新发现更新这篇文章。
【问题讨论】:
-
您可以避免使用这些文档中显示的
--ingress标志(并在入口资源中设置nginx.ingress.kubernetes.io/service-upstream: "true"注释)。这应该够了吧。
标签: kubernetes linkerd