Kubernetes nginx入口在集群内部工作,但在集群外部不可见



我设置了一个琐碎的kubernetes yaml文件(如下(来测试nginx入口。Nginx在集群内按预期工作,但在集群外不可见。

我正在使用minikube tunnelminikube addons enable ingress运行minikube。当我kubectl exec进入nginx-controller时,我可以看到nginx正在工作并提供测试页面,但当我试图从外部访问它时,我得到了Failed to connect to 127.0.0.1 port 80: Connection refused

将以下yaml保存为stackoverflow.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
name: cheese-app
labels:
app: cheese-app
spec:
replicas: 1
selector:
matchLabels:
app: cheese-app
template:
metadata:
labels:
app: cheese-app
spec:
containers:
- name: cheese-container
image: errm/cheese:stilton
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: cheese-svc
spec:
selector:
app: cheese-app
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cheese-ingress
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: cheese-svc
servicePort: 80

然后初始化minikube

minikube start
minikube addons enable ingress
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-system ingress-nginx/ingress-nginx
kubectl wait --for=condition=ready pod --all --timeout=120s
kubectl get pods

在另一个终端窗口中启动minikube隧道

minikube tunnel

并应用yaml文件

kubectl apply -f ./stackoverflow.yaml
kubectl wait --for=condition=ready pod --all --timeout=120s
kubectl get pods
kubectl get svc

作为参考,我的pod和svc是

NAME                                                       READY   STATUS    RESTARTS   AGE
cheese-app-74ddc9f7c6-xpjwx                                1/1     Running   0          89m
ingress-system-ingress-nginx-controller-656bf75d85-fkzzp   1/1     Running   0          90m
cheese-svc                                          ClusterIP      10.104.243.39   <none>        80/TCP                       82m
ingress-system-ingress-nginx-controller             LoadBalancer   10.106.203.73   127.0.0.1     80:30635/TCP,443:32594/TCP   83m
ingress-system-ingress-nginx-controller-admission   ClusterIP      10.101.103.74   <none>        443/TCP                      83m
kubernetes                                          ClusterIP      10.96.0.1       <none>        443/TCP                      84m

此时,理论上curl 127.0.0.1/应该返回一个示例网页,但它报告的是connection refused

作为诊断步骤,我尝试使用kubectl exec从集群内的nginx服务器卷曲页面。只要我使用自己的127.0.0.1端点卷曲nginx,它就可以工作。如果我使用它的CLUSTER-IP(这个集群中的10.106.203.73(对它进行卷曲,我什么也得不到。

kubectl exec --stdin --tty ingress-system-ingress-nginx-controller-656bf75d85-fkzzp -- curl 127.0.0.1/ -i
...works...
kubectl exec --stdin --tty ingress-system-ingress-nginx-controller-656bf75d85-fkzzp -- curl 10.106.203.73/ -i
...nothing...
curl 127.0.0.1/
...nothing...

我没有以任何方式修改/etc/nginx/nginx.conf,它是通过设置kubernetes入口自动生成的默认配置。

在集群中,这个链接应该可以工作-http://.:港口城市在你的情况下——http://cheese-svc.default:80

要从外部访问它,可以在nodePort 30635上访问该服务http://10.106.203.73:30635

使用minikube时,请使用minikube ip获取单节点minikube集群的IP。

然后curl http://<minikube_ip>:<nodePort>

我的解决方案是得出结论,minikube不值得付出这些努力。我花了几分钱在一个小小的Azure Kubernetes集群上旋转了几分钟,一切都很快就好了。

我曾认为在minikube或Docker for Windows安装的Kubernetes集群中本地运行会比在云实例中运行更快、更容易,但我错了。在这些本地测试环境中,小的、奇怪的、令人讨厌的拦截器的数量太多了。你的里程可能会有所不同,但如果能为我节省几天的本地开发环境调试失败的时间,我肯定愿意花几美分来测试我的构建。

相关内容

  • 没有找到相关文章

最新更新