我尝试用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驱动程序听起来是一个可能的解决方案。(我现在正在尝试,但你写的应该有效(。