首页 > 解决方案 > Istio 注入 DB 应用,将其服务类型设为 NodePort,该节点端口无法访问

问题描述

我使用istio 1.0.2 版本istio-demo-auth .yaml,我有一个mssqlactivemq部署在与其他应用程序相同的命名空间中,两者都是由 istioctl 注入的。应用程序可以连接到集群内的这两个服务,但是我将这两个服务的类型设置为NodePort,它成功了,但我无法访问那些节点端口(52433、51618 或 58161)。

kubectl get svc -n $namespace
名称 类型 CLUSTER-IP EXTERNAL-IP PORT(S) 年龄
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 后,nodeport 不工作,它是怎么工作的?
谢谢。

标签: istio

解决方案


参考文档:

类型节点端口

如果将该 type 字段设置为 NodePort,Kubernetes master 将从 --service-node-port-range 标志指定的范围内分配一个端口(默认值:30000-32767),并且每个节点都会将该端口(每个节点上相同的端口号)代理到您的 Service. 该端口将在您 Service.spec.ports[*].nodePort 字段中报告。

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

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


推荐阅读