Kubernetes Istio 网关和 VirtualService 配置 Flask 示例

Kubernetes Istio Gateway & VirtualService Config Flask Example

我尝试获得一些 K8s 和 istio 的实践经验。我正在使用 minikube,我尝试部署一个虚拟烧瓶网络应用程序。但是,出于某种原因,我无法使 istio 路由正常工作。

例如

curl -v -H 'Host: hello.com' 'http://127.0.0.1/' --> 503 Service Unavailable

你发现我的规格有问题吗?

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: flask-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "hello.com" 

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: flaskvirtualservice
spec:
  hosts:
  - "hello.com" 
  gateways:
  - flask-gateway
  http:
  - route:
    - destination:
        host: flask.default.svc.cluster.local
        port:
          number: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask
  labels:
    app: flask
spec:
  replicas: 1
  selector:
    matchLabels:
      app: flask
  template:
    metadata:
      labels:
        app: flask
    spec:
      containers:
      - name: flask
        image: digitalocean/flask-helloworld
        ports:
        - containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
  name: flask-service
spec:
  selector:
    app.kubernetes.io/name: flask
  ports:
  - name: name-of-service-port
    protocol: TCP
    port: 80
    targetPort: 5000

在此感谢您的支持!

干杯

编辑:

这里是更新后的服务定义

apiVersion: v1
kind: Service
metadata:
  name: flask
  labels:
    app: flask
    service: flask
spec:
  ports:
  - port: 5000
    name: http
  selector:
    app: flask

我建议您查看 istio 存储库中的示例:

https://github.com/istio/istio/tree/master/samples/helloworld

helloworld 应用程序是一个 flask 应用程序,您可以在 src

中找到 python 源代码

语法

在您的 yaml 中,您的 GatewayVirtualService 之间没有 ---

DNS

你也没有提到 DNS IE 你需要确保你所在的盒子 运行 curl 能够解析你的域 hello.com 到 istio 服务 ip。由于您使用的是 minikube,因此您可以在 OS 主机文件中添加一个条目。

可路由性

它有能力向它发送请求,IE 如果你在集群之外你需要一个外部 ip 或者用 kubectl port-forward ...

做一些事情

我希望这可以帮助您解决问题![​​=20=]