在windows 10上,连接到docker容器内的minikube入口失败



我尝试用ingress设置一个简单的minikube集群

遵循本教程之后:https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/

我的行动:

  • minkube start
  • minikube addons enable ingress
  • kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
  • kubectl expose deployment web --type=NodePort --port=8080
  • kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml
  • 将条目添加到主机文件

我无法从PowerShell中curl hello-world.info(如果在.yaml文件中未指定主机,我也无法curl $(minikube ip)(,但它可以在docker容器cli:中工作

# curl hello-world.info
Hello, world!
Version: 1.0.0
Hostname: web-79d88c97d6-pw565

我认为docker没有将我的请求转发到minikube集装箱,这是对的吗

Docker检查选项卡:

Environment
CONTAINER
docker
PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Mounts
/VAR
/var/lib/docker/volumes/minikube/_data
/LIB/MODULES
/lib/modules
Ports
22/tcp
127.0.0.1:0
2376/tcp
127.0.0.1:0
32443/tcp
127.0.0.1:0
5000/tcp
127.0.0.1:0
8443/tcp
127.0.0.1:0

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello-world.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
PS D:> kubectl get ing
NAME              CLASS    HOSTS              ADDRESS        PORTS   AGE
example-ingress   <none>   hello-world.info   192.168.49.2   80      22m
minikube version: v1.18.1
minikube docker image: gcr.io/k8s-minikube/kicbase  v0.0.18
system: Windows 10

编辑

我还试图在clean minikube上创建一个NodePort类型的服务,这样我就可以使用clusterIP:servicePort访问它,但同样的事情也发生了。在完成minikube ssh(IP:servicePort或127.0.0.1:servicePort(后,我可以在minikube上访问它,所以服务运行得很好,但我无法从docker之外卷曲它。

编辑2

现在我尝试了一些转发。下面的命令允许我访问127.0.0.1:8080 上的"web"服务

PS D:> kubectl port-forward service/web 8080
Forwarding from 127.0.0.1:8080 -> 8080

我想这与minikube service web类似,但这不能用于入口。

minikube tunnel接缝对我没有任何作用

edit3

我可以通过创建两个服务来验证入口是否工作:

kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
kubectl expose deployment web --type=NodePort --port=8080
kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:1.0
kubectl expose deployment web2 --type=NodePort --port=8080

并指向它的路径-ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- http:
paths:
- path: /web1
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
- path: /web2
pathType: Prefix
backend:
service:
name: web2
port:
number: 8080

docker cli:

# curl 127.0.0.1/web2
Hello, world!
Version: 1.0.0
Hostname: web2-5b669f8984-5tgpn
# curl 127.0.0.1/web1
Hello, world!
Version: 1.0.0
Hostname: web-79d88c97d6-8h6dq

通过查看主机名,您可以看到不同的pod会做出响应。但我仍然无法从docker 外部访问入口

我面临同样的问题,没有找到Docker驱动程序的解决方案。但我发现Minikube仍然不支持Docker驱动程序的完整Ingress功能:https://minikube.sigs.k8s.io/docs/drivers/docker/#known-发布

ingress和ingress dns插件当前仅在上受支持Linux。参见#7332

因此,使用virtualbox驱动程序听起来是一个可能的解决方案。(我现在正在尝试,但你写的应该有效(。

相关内容

  • 没有找到相关文章

最新更新