【发布时间】:2021-05-21 17:38:33
【问题描述】:
我正在尝试学习有关 istio 的基础知识,因此我阅读了官方文档 here 以创建 80/20 的金丝雀部署,我还遵循了 digitalocean 的这个指南,它解释了它非常简单部署https://www.digitalocean.com/community/tutorials/how-to-do-canary-deployments-with-istio-and-kubernetes。
我在主页上创建了一个包含 2 条不同消息的简单应用程序,然后创建了 virtualService、Gateway 和目标规则。我(如指南中所述)使用kubectl -n istio-system get svc 获取外部IP,并尝试导航到该地址,但出现503 错误。这看起来很简单,但我必须遗漏一些东西。这些是我的 3 个文件(据我所知,没有更多必要的文件):
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
namespace: istio
name: flask-gateway
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- "*"
port:
name: http
number: 80
protocol: HTTP
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: flask-app
namespace: istio
spec:
hosts:
- "*"
gateways:
- flask-gateway
http:
- route:
- destination:
host: flask-app
subset: v1
weight: 80
- destination:
host: flask-app
subset: v2
weight: 20
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: flask-app
namespace: istio
spec:
host: flask-app
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
这里是带有 v1 和 v2 部署和服务的 yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
version: v1
name: flask-deployment-v1
namespace: istio
spec:
replicas: 1
selector:
matchLabels:
app: flask-app
template:
metadata:
labels:
version: v1
app: flask-app
spec:
containers:
- name: flask-app
image: latalavera/flask-app:1.3
ports:
- containerPort: 5000
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
name: flask-service
namespace: istio
spec:
selector:
app: flask-app
ports:
- port: 5000
protocol: TCP
targetPort: 5000
type: ClusterIP
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
version: v2
name: flask-deployment-v2
namespace: istio
spec:
replicas: 1
selector:
matchLabels:
app: flask-app
template:
metadata:
labels:
app: flask-app
version: v2
spec:
containers:
- name: flask-app
image: latalavera/flask-app:2.0
ports:
- containerPort: 5000
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 250m
memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
name: flask-service2
namespace: istio
spec:
selector:
app: flask-app
ports:
- port: 5000
protocol: TCP
targetPort: 5000
type: ClusterIP
我已将标签 version: v1 和 version: v2 添加到我的部署中,并且我还使用了 kubectl label ns istio istio-injection=enabled 命令,但它们无论如何都不起作用
【问题讨论】:
-
您的
flask-app是否部署在istio-system命名空间中? -
它部署在我创建的 istio 命名空间中,我认为
kubectl label ns istio istio-injection=enabled使资源在其他命名空间中可用 -
我刚刚尝试在 ns istio-system 中部署所有内容,但我一直收到 503...根据 guid,我只需要从 istio-ingressgateway 复制粘贴外部 ip,我通过了
kubectl -n istio-system get svc命令权 -
不抱歉,问题是它是否部署在那里。我不应该在 istio-system ns 中运行。你能添加清单以进行部署和服务吗
-
@ChristophRaab 我已经更新了它。感谢您的帮助!
标签: docker kubernetes istio