簡體   English   中英

帶有 Istio Ingress 的 Kubernetes 未在標准 HTTP 端口 443/80 上運行

[英]Kubernetes with Istio Ingress Not Running on Standard HTTP Ports 443/80

我正在嘗試在 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 的示例:

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 上收聽的任何想法? 我是否完全錯過了一個組件?

如果需要路由到您的應用程序才能在 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,但並沒有花太多時間在上面。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM