问题描述
我想在自己的托管系统上构建一个gitlab + kubernetes小gitop。但是当我尝试从gitlab kubernetes部分安装nginx ingress时,出现此错误:
Service is not ready: gitlab-managed-apps/ingress-nginx-ingress-controller
因为我使用的是自托管的kubernetes,所以我需要修补LoadBalancer nginx-ingress服务。
kubectl patch svc ingress-nginx-ingress-controller -n gitlab-managed-apps -p '{"spec": {"type": "LoadBalancer","externalIPs":["10.0.0.5","10.0.0.6","10.0.0.7"]}}'
但这不能解决问题。
我在此命名空间中检查事件:
18m Normal Started pod/ingress-nginx-ingress-default-backend-78dd5dc449-fpvwb Started container nginx-ingress-default-backend
18m Normal Created pod/ingress-nginx-ingress-default-backend-78dd5dc449-fpvwb Created container nginx-ingress-default-backend
18m Normal Started pod/ingress-nginx-ingress-controller-7fdc67ff64-spxsn Started container nginx-ingress-controller
18m Normal Created pod/ingress-nginx-ingress-controller-7fdc67ff64-spxsn Created container nginx-ingress-controller
18m Normal Pulled pod/ingress-nginx-ingress-controller-7fdc67ff64-spxsn Container image "quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.28.0" already present on machine
18m Normal Pulled pod/ingress-nginx-ingress-default-backend-78dd5dc449-fpvwb Container image "k8s.gcr.io/defaultbackend-amd64:1.5" already present on machine
18m Normal ExternalIP service/ingress-nginx-ingress-controller Count: 0 -> 3
13m Normal Killing pod/ingress-nginx-ingress-controller-7fdc67ff64-spxsn Stopping container nginx-ingress-controller
13m Normal Killing pod/ingress-nginx-ingress-default-backend-78dd5dc449-fpvwb Stopping container nginx-ingress-default-backend
13m Warning Unhealthy pod/ingress-nginx-ingress-default-backend-78dd5dc449-fpvwb Readiness probe failed: Get "http://192.168.126.172:8080/healthz": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
12m Warning Unhealthy pod/ingress-nginx-ingress-controller-7fdc67ff64-spxsn Readiness probe failed: HTTP probe failed with statuscode: 500
12m Warning Unhealthy pod/ingress-nginx-ingress-controller-7fdc67ff64-spxsn Liveness probe failed: HTTP probe failed with statuscode: 500
在安装项pod终止所有相关的pod,服务时,将生成Readines和Liveness行。
来自安装入口容器的日志:
...
[tiller] 2020/09/02 22:41:21 performing install for ingress
[tiller] 2020/09/02 22:41:21 executing 0 crd-install hooks for ingress
[tiller] 2020/09/02 22:41:21 hooks complete for crd-install ingress
[tiller] 2020/09/02 22:41:21 executing 0 pre-install hooks for ingress
[tiller] 2020/09/02 22:41:21 hooks complete for pre-install ingress
[storage] 2020/09/02 22:41:21 getting release history for "ingress"
[storage] 2020/09/02 22:41:21 creating release "ingress.v1"
[kube] 2020/09/02 22:41:21 building resources from manifest
[kube] 2020/09/02 22:41:21 creating 10 resource(s)
[kube] 2020/09/02 22:41:21 beginning wait for 10 resources with timeout of 5m0s
[kube] 2020/09/02 22:41:23 Service is not ready: gitlab-managed-apps/ingress-nginx-ingress-controller
[kube] 2020/09/02 22:41:25 Service is not ready: gitlab-managed-apps/ingress-nginx-ingress-controller
[kube] 2020/09/02 22:41:27 Service is not ready: gitlab-managed-apps/ingress-nginx-ingress-controller
[kube] 2020/09/02 22:41:29 Service is not ready: gitlab-managed-apps/ingress-nginx-ingress-controller
...
当我开始安装入口并修补服务时,入口就可以正常工作了,我可以查询入口等。
解决方法
发布日志(安装过程中):
kubectl logs pod/install-ingress-nginx -n gitlab-managed-apps
我有同样的问题。对于裸机安装,请使用MetalLB:https://metallb.universe.tf/installation/和https://metallb.universe.tf/configuration/
您可以使用头盔:https://github.com/bitnami/charts/tree/master/bitnami/metallb,然后必须更改名称空间和名称:
apiVersion: v1
kind: ConfigMap
metadata:
namespace: default
name: metallb
data:
config: |
address-pools:
- addresses:
- 192.168.1.100-192.168.88.110
name: default
protocol: layer2
您需要获取用于服务/ ingress-nginx-ingress-controller的外部IP:
kubectl get svc --all-namespaces
有关负载平衡支持的更多信息:https://rancher.com/docs/rancher/v2.x/en/k8s-in-rancher/load-balancers-and-ingress/load-balancers/
https://kubernetes.github.io/ingress-nginx/deploy/baremetal/