按照这个例子
https://istio.io/latest/docs/examples/bookinfo/ 以下是 istioctlanalyze 的输出
istioctl 分析的输出
按照 istioctl 工具的建议更新了端口号和选择器。但仍处于死胡同
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
# The selector matches the ingress gateway pod labels.
# If you installed Istio using Helm following the standard documentation, this would be "istio=ingress"
selector:
istio: ingress # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
您好gera1390您的步骤是正确的,文档中有一个小问题。我尝试了您分享的相同文档,发现了同样的问题。
已下载 istio
已安装 Istio
添加了命名空间标签
kubectl label namespace default istio-injection=enabled
部署在 bookinfo 示例中
kubectl apply -f [samples/bookinfo/platform/kube/bookinfo.yaml](https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/platform/kube/bookinfo.yaml)
验证了服务和 Pod
kubectl get services
kubectl get pods
将 bookinfo 与网关关联
kubectl apply -f [samples/bookinfo/networking/bookinfo-gateway.yaml](https://raw.githubusercontent.com/istio/istio/release-1.20/samples/bookinfo/networking/bookinfo-gateway.yaml)
使用
istioctl analyze
进行分析
获取外部IP
kubectl get svc istio-ingressgateway -n istio-system
设置入口IP和端口并导出网关url
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
在整个设置中,我确保没有启用防火墙,我的 NSG 规则允许端口 80 和 443
相反,您可以尝试以下替代选项-
选项 1- 本地主机方法,我尝试使用本地主机,并且能够通过本地主机访问它- 部署过程保持不变。您创建一个集群。
为 bookinfo 创建命名空间
kubectl create namespace bookinfo
如上所示部署应用程序
部署后,验证 pod-
使用
kubectl port-forward -n bookinfo service/productpage 9090
进行端口转发
并通过本地主机访问它
选项2- 按照这个设置 更新您的
/etc/hosts
配置文件 在您的 /etc/hosts
文件中,将之前的 IP 地址添加到以下命令提供的主机条目中。
echo $(kubectl get ingress istio-system -n istio-system -o jsonpath='{..ip} {..host}') $(kubectl get ingress bookinfo -o jsonpath='{..host}')
您应该拥有 超级用户 权限,并且可能使用
sudo
来编辑 /etc/hosts
。
并从命令行访问应用程序的主页:
kubectl exec $(kubectl get pod -l app=sleep -o jsonpath='{.items[0].metadata.name}') -c sleep -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"
参考文档-