我从出厂设置重置了整个Docker Desktop并启用了kubernetes。然后,我运行kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.4/deploy/static/provider/cloud/deploy.yaml
并等待入口准备就绪。然后,我部署我的应用程序,其中包括几个服务和一个入口定义。
入口如下:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 100m
spec:
ingressClassName: nginx
rules:
- host: test.project.com
http:
paths:
- path: "/.*"
pathType: "Prefix"
backend:
service:
name: test-frontend
port:
number: 80
查看服务,我得到:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
test-frontend ClusterIP 10.104.106.210 <none> 80/TCP 40m
kubectl get services -n ingress-nginx
返回
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.100.44.33 <pending> 80:30753/TCP,443:31632/TCP 51m
ingress-nginx-controller-admission ClusterIP 10.97.85.58 <none> 443/TCP 51m
kubectl get ingresses
返回
NAME CLASS HOSTS ADDRESS PORTS AGE
test-ingress nginx test.project.com 80 31m
正如您所看到的,DockerDesktop或Ingress没有像通常那样将入口正确绑定到localhost。在过去的几周里,我一直在不断地停止、重新启动、重建和重置我的部署、服务、入口、节点、计算机和Docker桌面,直到它突然开始工作。我一直无法找到真正修复它的方法,它是否有效以及何时停止工作似乎几乎是随机的。
我能找到的唯一有趣的事情涉及test-ingress
:的事件
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 35m (x3 over 42m) nginx-ingress-controller Scheduled for sync
Normal Sync 27m (x2 over 28m) nginx-ingress-controller Scheduled for sync
Normal Sync 7m55s (x2 over 14m) nginx-ingress-controller Scheduled for sync
编辑:重新启动我的桌面后,它又开始工作了。至于如何防止这种情况,或者下次如何更快地解决这种问题,请留下任何想法,因为这已经是第5次或第6次了。
可以尝试
kubectl expose deployment test-ingress-deployment --type=NodePort --port=8080 --name=test-ingress-service -n demo --dry-run=1 -o yaml > mypod-service.yaml
为服务生成yaml模板
然后通过应用yaml文件启动服务
然后应用入口yaml文件
在窗口10上,它将分配一个可以从"minikube ip":9999/*
url 访问的随机端口9999
主机名并没有真正设置,而是在主机文件中。入口可以通过ip访问。入口是对多个服务的端点访问,而不考虑名称空间,但服务必须直接公开。
如果主机文件没有用minikube ip和主机名更新,则ingress将被安排同步。
它应该与Hyper-VM 一起工作
https://local/hello