我正在尝试在Kubernetes上将Istio设置为入口控制器。问题是我的两个应用程序似乎可以从Istio入口控制器节点端口(例如http://[host]:31380/application1和 http://[host]:31380/application2),但无法从443/80访问。
我是Kubernetes和Istio的新手,所以我使用了https://istio.io/docs/guides/bookinfo/指南作为参考。遵循指南非常容易,我能够使用所提到的节点端口访问Bookinfo应用程序。我无法从443/80访问它。我使用舵图来安装Istio。在Kubernetes仪表板的“入口”下也看不到任何内容。
以下是网关/虚拟服务yaml的示例:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: myapp-gateway spec: selector: istio: ingressgateway # use istio default controller servers: - port: number: 80 name: http protocol: HTTP hosts: - "*" --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: myapp-virtual-service spec: hosts: - "*" gateways: - myapp-gateway http: - match: - uri: prefix: /myapp route: - destination: host: myapp-app-service port: number: 7080 - match: - uri: prefix: / route: - destination: host: kibana port: number: 5601
关于我必须做什么才能听443的任何想法?我是否完全缺少组件?
答案 0 :(得分:3)
如果需要路由到您的应用程序才能在443/80上运行,则您的Kubernetes群集必须部署了外部负载均衡器。如果不存在,流量将被路由到入口节点端口。
请参阅-https://istio.io/docs/tasks/traffic-management/ingress/#determining-the-ingress-ip-and-ports(确定入口IP和端口):
”如果设置了EXTERNAL-IP值,则您的环境具有可用于入口网关的外部负载均衡器。如果EXTERNAL-IP值是(或永久),则您的环境不提供入口网关的外部负载平衡器。在这种情况下,您可以使用服务的节点端口访问网关。“
我的没有外部负载均衡器的裸机实例的示例:
[admin@master1 ~]$ kubectl get svc -n istio-system | grep istio-ingress istio-ingress LoadBalancer 10.114.107.196 <pending> 80:32400/TCP,443:31564/TCP 5d istio-ingressgateway LoadBalancer 10.99.1.148 <pending> 80:31380/TCP,443:31390/TCP,31400:31400/TCP 5d
如果要部署到诸如IBM Bluemix(可能是AWS / Azure /等)的在线云提供商,则应该已经配置了一个。如果您的配置是裸机,则可能未配置负载均衡器。
带有外部负载均衡器的Bluemix实例的示例:
λ kubectl get svc -n istio-system | grep istio-ingress istio-ingress LoadBalancer 172.21.26.25 123.45.67.195 80:32000/TCP,443:31694/TCP 6h istio-ingressgateway LoadBalancer 172.21.139.142 123.45.67.196 80:31380/TCP,443:31390/TCP,31400:31400/TCP 6h
我还没有回去将负载均衡器部署到裸机上,所以想听听是否有人这样做。我简要看了一下Metal,但并没有花太多时间。
答案 1 :(得分:0)
可以在api服务器清单上修改节点端口范围,如果使用的是kubeadm,请编辑“ /etc/kubernetes/manifests/kube-apiserver.yaml”文件并添加以下行:
- --service-node-port-range=80-32767
然后,编辑“ istio-ingressgateway”服务:
- name: http2
nodePort: 80
port: 80
protocol: TCP
targetPort: 8080
- name: https
nodePort: 443
port: 443
protocol: TCP
targetPort: 8443