我用Docker Desktop for Mac启动了一个kubernetes集群,然后在集群上安装Istio,并按照向外部流量开放应用程序中的步骤创建Istio入口网关。现在,我有:
(base) ~/istio/istio-1.16.1 $ kubectl get svc -A
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default details ClusterIP 10.105.143.37 <none> 9080/TCP 5h5m
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6h16m
default productpage ClusterIP 10.106.2.22 <none> 9080/TCP 5h5m
default ratings ClusterIP 10.111.217.64 <none> 9080/TCP 5h5m
default reviews ClusterIP 10.104.251.134 <none> 9080/TCP 5h5m
istio-system istio-egressgateway ClusterIP 10.99.102.205 <none> 80/TCP,443/TCP 6h15m
istio-system istio-ingressgateway LoadBalancer 10.108.135.209 localhost 15021:32723/TCP,80:32335/TCP,443:32040/TCP,31400:30864/TCP,15443:31429/TCP 6h15m
istio-system istiod ClusterIP 10.101.35.195 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP 6h15m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 6h16m
根据Istio文档,对于Docker Desktop,入口网关主机设置为127.0.0.1。
$ export INGRESS_HOST=127.0.0.1
在这一点上,我不能访问127.0.0.1:80/productpage,也不能从我的Mac访问127.0.0.1:32335/productpage。但是根据istio文档,我应该能够访问该页。
我知道Docker for Desktop for Mac会设置一个linuxkit虚拟机,并在这个虚拟机上部署kubernetes。这个虚拟机有一个内部ip 192.168.65.4,我无法从我的mac主机到达。所以上面kubectl get svc命令中的localhost应该是指linuxkit VM,而不是我的mac主机。那么如何从我的mac主机访问linuxkit VM上的nodeport 32335 ?
您需要使用端口转发从Mac访问Istio入口网关。首先,找到Istio入口网关正在侦听的端口。
获得端口号后,运行以下命令将其转发到本地机器:
kubectl port-forward -n istio-system svc/istio-ingressgateway <PORT_NUMBER>