具有Istio Ingress的Kubernetes无法在标准HTTP端口443/80上运行

时间:2018-07-13 19:43:44

标签: routing kubernetes kubernetes-ingress istio

我正在尝试在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的任何想法?我是否完全缺少组件?

2 个答案:

答案 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