我在内部有一个kubernetes集群。在集群内部,我有两个应用程序:A和B。应用程序A通过带有hostNetwork: true
的入口nginx暴露在外部。应用程序的域是foo.example.com。应用程序A正在连接到应用程序B,而应用程序B没有暴露。
我希望能够通过Canary部署来部署应用程序B。我的问题是如何使用istio和ingress nginx实现我的目标?那有可能吗?
任何建议都将受到赞赏。
答案 0 :(得分:0)
您可以通过不使用Istio部署具有与生产Pod相同标签的Canary Pod来执行Canary Pod的部署,因此它会附加到同一服务,并处理1 / n 的流量。您将不会像创建交通路线以及特定金丝雀获得多少交通这样的可能性。 在没有Istio的Kubernetes集群中,金丝雀荚的数量直接影响它们在任何给定时间点获得的流量。
关于Canary部署的有用博客:canary-deployment。
要使用Istio进行Canary部署,请遵循以下说明:istio-traffic-management。
示例虚拟服务端定义:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-vtl-svc
spec:
hosts:
- "*.my-co.org"
http:
- route:
- destination:
host: my-svc
subset: v1
在示例中,在规范下,主机列出了虚拟服务的主机。在这种情况下,主机是* .my-co.org,其中*是通配符前缀,指示此虚拟服务处理任何以.my-co.org结尾的DNS名称的路由。
您可以使用任何DNS名称或内部网格服务名称来指定用户可寻址的主机,只要该名称隐式或显式解析为一个或多个完全限定的域名(FQDN)。要指定多个主机,可以使用通配符。
此外,请注意,在route(指定路由规则的配置)和destination(指定路由规则的目标)下的host(主机):my-svc指定目标的主机。如果您在Kubernetes上运行,则my-svc是Kubernetes服务的名称。
示例目标规则定义:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: my-destination-rule
spec:
host: my-svc
trafficPolicy:
loadBalancer:
simple: RANDOM
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
- name: v3
labels:
version: v3
您可以在一个目标规则中指定多个策略。在此示例中,在子集字段上方定义的默认策略为v1和v3子集设置了一个简单的随机负载均衡器。在相应子集的字段中定义了特定于v2的策略,即循环负载均衡器。