Istio注入的数据库应用程序,将其服务类型设置为NodePort,无法访问该节点端口

时间:2018-11-05 08:43:04

标签: istio

我将 istio 1.0.2版本 istio-demo-auth .yaml一起使用,我有一个 mssql activemq ,都是由istioctl注入的。应用程序可以连接到集群中的这两个服务,但是我将这两个服务的类型设为 NodePort ,成功了,但是我无法访问那些节点端口(52433、51618或58161)。

kubectl get svc -n $namespace
名称类型集群IP外部IP端口年龄
amq-master-01 NodePort 10.254.176.151 61618:51618 / TCP,8161:58161 / TCP 4h
mssql-master NodePort 10.254.209.36 2433:52433 / TCP 33m

kubectl get deployment -n $namespace
所需的当前最新可用年龄
activemq 1 1 1 1 4h
mssql-master 1 1 1 1 44m

然后,我尝试使用网关和虚拟服务来使用ingressgateway tcp端口31400。它的工作原理如下:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: tcp-gateway
      namespace: multitenancy
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 31400
          name: tcp
          protocol: TCP
        hosts:
        - "*"
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: mssql-tcp
      namespace: multitenancy
    spec:
      gateways:
      - tcp-gateway
      hosts:
      - "*"
      tcp:
      - match:
        - port: 31400
        route:
        - destination:
            host: mssql-master
            port:
              number: 2433

我的问题是,
1.如何为61618或其他tcp连接配置另一个http连接?目前,我只能将31400用于一项服务(mssql-2433)。
2.在将那些应用程序注入istio后,为什么该节点端口不起作用,怎么办?
谢谢。

1 个答案:

答案 0 :(得分:0)

引用documentation:

键入NodePort

如果将type字段设置为NodePort,Kubernetes主服务器将在--service-node-port-range标志指定的范围内分配端口(默认值:30000-32767),并且每个节点将将该端口(每个节点上的相同端口号)代理到您的Service中。该端口将在您的Service的{​​{1}}字段中报告。

只需更新所有主服务器的配置,便可以分配任何端口。

关于第二个问题: 我建议您在github,上创建一个问题,因为它看起来像个错误,在文档中使用nodePort没有限制。