【问题标题】:Kubernetes with Istio Ingress Not Running on Standard HTTP Ports 443/80具有 Istio Ingress 的 Kubernetes 未在标准 HTTP 端口 443/80 上运行
【发布时间】:2018-12-22 05:38:28
【问题描述】:

我正在尝试在 Kubernetes 上将 Istio 设置为入口控制器。问题是我的两个应用程序似乎可以从 Istio 入口控制器节点端口访问(例如,http://[host]:31380/application1http://[host]:31380/application2) 但无法从 443/80 访问。

我是 Kubernetes 和 Istio 的新手,所以我使用了 https://istio.io/docs/guides/bookinfo/ 指南作为参考。遵循指南相当简单,我能够使用提到的节点端口访问 Bookinfo 应用程序。我无法从 443/80 访问它。我使用 helm chart 安装 Istio。我在 Kubernetes 仪表板的 Ingresses 下也看不到任何内容。

以下是网关/虚拟服务 yaml 的示例:

api版本:networking.istio.io/v1alpha3 种类:网关 元数据: 名称:myapp-网关 规格: 选择器: istio: ingressgateway # 使用 istio 默认控制器 服务器: - 港口: 数量:80 名称:http 协议:HTTP 主持人: - “*” --- api版本:networking.istio.io/v1alpha3 种类:虚拟服务 元数据: 名称:myapp-虚拟服务 规格: 主持人: - “*” 网关: - myapp-网关 网址: - 匹配: - 乌里: 前缀:/myapp 路线: - 目的地: 主机:myapp-app-service 港口: 号码:7080 - 匹配: - 乌里: 字首: / 路线: - 目的地: 主持人:kibana 港口: 号码:5601

有什么想法可以让它在 443 上收听吗?我完全错过了一个组件吗?

【问题讨论】:

  • 我也面临同样的问题。您应该尝试将其作为问题发布在他们的 GitHub 页面上。可能会得到快速响应。我尝试将 NodePort 从 31380 更改为 80,但它说 NodePort 范围在 30000 - 32767 之间 服务“istio-ingressgateway”无效:spec.ports[0].nodePort:无效值:80:提供的端口是不在有效范围内。有效端口范围为 30000-32767
  • @Kushal,问题的根本原因基本上是您需要部署外部负载均衡器。我假设您也在使用裸机进行部署。如果您运行“kubectl get svc -n istio-system | grep istio-ingress”,它会显示外部 IP 为待处理,对吗?我的解决方法是部署到我们的 IBM Bluemix K8 集群,该集群使用与上述完全相同的 yaml。

标签: routing kubernetes kubernetes-ingress istio


【解决方案1】:

如果需要路由到您的应用程序以在 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  80:32400/TCP,443:31564/TCP 5d
istio-ingressgateway LoadBalancer 10.99.1.148  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,但没有花太多时间。

【讨论】:

  • 您好,您可以使用 metalLB 作为您的负载平衡器。它不是真正的网络负载均衡器,而是可以为负载均衡器服务类型提供 IP 的实体
【解决方案2】:

nodeport 范围可以在 api-server 清单上进行修改,如果您使用的是 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

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 2019-02-02
    • 2022-01-11
    • 2018-09-11
    • 2014-08-16
    • 2021-04-06
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多