我可以将istio用于通过kubernetes中的节点端口访问的服务吗?

时间:2019-04-08 03:30:07

标签: kubernetes istio

问题

我在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显示流量

enter image description here

然后,我希望所有流量都流向v1版,因此我创建了一个虚拟服务和destinationrule,

[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配合使用?

环境

  

kubernetes 1.13.3

     

istio 1.1.2

1 个答案:

答案 0 :(得分:0)

我在Istio设置中看不到任何Gateway配置。 Istio网关代表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

在上述情况下,我们希望允许端口devo-159239e607c694e08b146c855b393652上的主机def select_columns(data_frame, column_names): new_frame = data_frame.loc[:, column_names] return new_frame 使用HTTP通信。

您可以在演示预订应用程序example中找到有关通过Istio网格公开Kubernetes微服务的更多相关实用材料。