我正在尝试在一个小型集群上为Istio和Kubernetes设置bookinfo示例应用程序。 集群由两台机器组成,分别是主服务器和工作服务器,它们在两个Amazon AWS EC2实例的Ubuntu 18.04上运行。 每个实例都有一个分配的外部IP地址。
我无法做的是弄清楚如何将bookinfo服务公开给外界。
对于是否需要分别公开Istio入口网关或每个bookinfo服务,我感到困惑。
在列出入口网关时,外部IP字段仅显示待定。 另外,在描述工作程序节点时,在输出中没有提及外部IP地址。
我已经浏览过Google,但实际上找不到合适的解决方案。 描述入口网关仅提供内部(即10.x.x.x)地址。
get和describe命令的输出:
kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 10.96.39.4 <pending> 15020:31451/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:31075/TCP,15030:32093/TCP,15031:31560/TCP,15032:30526/TCP,15443:31526/TCP 68m
kubectl describe svc istio-ingressgateway -n istio-system
Name: istio-ingressgateway
Namespace: istio-system
Labels: app=istio-ingressgateway
chart=gateways
heritage=Tiller
istio=ingressgateway
release=istio
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"istio-ingressgateway","chart":"gateways","heritage":"Til...
Selector: app=istio-ingressgateway,istio=ingressgateway,release=istio
Type: LoadBalancer
IP: 10.96.39.4
Port: status-port 15020/TCP
TargetPort: 15020/TCP
NodePort: status-port 31451/TCP
Endpoints: 10.244.1.6:15020
Port: http2 80/TCP
TargetPort: 80/TCP
NodePort: http2 31380/TCP
Endpoints: 10.244.1.6:80
Port: https 443/TCP
TargetPort: 443/TCP
NodePort: https 31390/TCP
Endpoints: 10.244.1.6:443
Port: tcp 31400/TCP
TargetPort: 31400/TCP
NodePort: tcp 31400/TCP
Endpoints: 10.244.1.6:31400
Port: https-kiali 15029/TCP
TargetPort: 15029/TCP
NodePort: https-kiali 31075/TCP
Endpoints: 10.244.1.6:15029
Port: https-prometheus 15030/TCP
TargetPort: 15030/TCP
NodePort: https-prometheus 32093/TCP
Endpoints: 10.244.1.6:15030
Port: https-grafana 15031/TCP
TargetPort: 15031/TCP
NodePort: https-grafana 31560/TCP
Endpoints: 10.244.1.6:15031
Port: https-tracing 15032/TCP
TargetPort: 15032/TCP
NodePort: https-tracing 30526/TCP
Endpoints: 10.244.1.6:15032
Port: tls 15443/TCP
TargetPort: 15443/TCP
NodePort: tls 31526/TCP
Endpoints: 10.244.1.6:15443
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
任何帮助表示赞赏。
答案 0 :(得分:0)
引用Istio的official文档:
如果您的群集在不支持以下操作的环境中运行 外部负载平衡器(例如minikube),EXTERNAL-IP为 istio-ingressgateway会说-pending-。要访问网关,请使用 服务的NodePort,或改为使用端口转发。
您的集群似乎属于setting up Kubernetes的“自定义(云)”方式,默认情况下不支持Load Balancer。
为您提供的解决方案:
使用命令:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
使用命令:
export INGRESS_HOST=$(kubectl get nodes --selector='!node-role.kubernetes.io/master' -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}')
并遵循bookinfo示例的其余部分,而无需进行任何更改。