题
我在kubernetes中使用相同的服务创建了两个部署,类型是NodePort,
apiVersion: v1
kind: Service
metadata:
name: devo-159239e607c694e08b146c855b393652
namespace: devo-bsg-dev
labels:
app: devo
spec:
ports:
- name: http-app
nodePort: 31012
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: devo-159239e607c694e08b146c855b393652
type: NodePort
我可以通过NodePort访问我的服务,kiali也可以显示流量
然后我希望所有流量都转到版本v1,所以我创建了一个虚拟服务和目标规则,
[root@master104 beego2]# cat beego2-virtual-service.yml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: devo-159239e607c694e08b146c855b393652
namespace: devo-bsg-dev
spec:
hosts:
- devo-159239e607c694e08b146c855b393652
http:
- route:
- destination:
host: devo-159239e607c694e08b146c855b393652
subset: v1
[root@master104 beego2]# cat beego2-destination.yml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: devo-159239e607c694e08b146c855b393652
namespace: devo-bsg-dev
spec:
host: devo-159239e607c694e08b146c855b393652
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
但结果没有按预期显示
问题是:我的规则是错误的还是istio不能用于nodeport?
环境
政府1.13.3
1.1.2清洗
我没有在你的Istio设置中看到任何Gateway配置。 Istio Gateway代表Kuberentes微服务前面的外部IP地址,允许通过指定端口,协议和主机传入流量。您可以在通用网关资源定义中使用默认的istio-ingressgateway
,然后绑定相应的VirtualService
,即:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
namespace: devo-bsg-dev
spec:
selector:
istio: ingressgateway #Default Istio Ingressgateway controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- devo-159239e607c694e08b146c855b393652
---
kind: VirtualService
metadata:
name: devo-159239e607c694e08b146c855b393652
namespace: devo-bsg-dev
spec:
hosts:
- devo-159239e607c694e08b146c855b393652
gateways:
- http-gateway
http:
- route:
- destination:
host: devo-159239e607c694e08b146c855b393652
subset: v1
在上面的场景中,我们希望允许端口80上的HTTP流量,主机devo-159239e607c694e08b146c855b393652
。
您可以在演示预订应用程序example中找到有关通过Istio网格公开Kubernetes微服务的更多相关实用材料。