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 中,您的 Gateway
和 VirtualService
之间没有 ---
。
DNS
你也没有提到 DNS
IE 你需要确保你所在的盒子 运行 curl
能够解析你的域 hello.com
到 istio 服务 ip。由于您使用的是 minikube,因此您可以在 OS 主机文件中添加一个条目。
可路由性
它有能力向它发送请求,IE 如果你在集群之外你需要一个外部 ip 或者用 kubectl port-forward ...
做一些事情
我希望这可以帮助您解决问题![=20=]
我尝试获得一些 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
语法
在您的 yaml 中,您的 Gateway
和 VirtualService
之间没有 ---
。
DNS
你也没有提到 DNS
IE 你需要确保你所在的盒子 运行 curl
能够解析你的域 hello.com
到 istio 服务 ip。由于您使用的是 minikube,因此您可以在 OS 主机文件中添加一个条目。
可路由性
它有能力向它发送请求,IE 如果你在集群之外你需要一个外部 ip 或者用 kubectl port-forward ...
我希望这可以帮助您解决问题![=20=]