Istio注入DB应用,将其服务类型设置为NodePort,nodeport无法访问
Istio injected DB apps, make their service type as NodePort, the nodeport cannot be accessed
我正在使用 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
然后我尝试使用 gateway 和 virtualservice 来使用 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 不工作,它怎么可能工作?
谢谢
类型 NodePort
如果将 type
字段设置为 NodePort
,Kubernetes master 将从 --service-node-port-range
标志指定的范围内分配一个端口(默认值:30000-32767),并且每个Node 会将该端口(每个节点上的相同端口号)代理到您的 Service
。该端口将在您的 Service
的 .spec.ports[*].nodePort
字段中报告。
只需更新所有主控的配置,您就可以分配任何端口。
关于第二个问题:
我建议你在 github, 上创建一个问题,因为它看起来像一个错误,在文档中没有使用 nodePort 的限制。
我正在使用 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
然后我尝试使用 gateway 和 virtualservice 来使用 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 不工作,它怎么可能工作?
谢谢
类型 NodePort
如果将 type
字段设置为 NodePort
,Kubernetes master 将从 --service-node-port-range
标志指定的范围内分配一个端口(默认值:30000-32767),并且每个Node 会将该端口(每个节点上的相同端口号)代理到您的 Service
。该端口将在您的 Service
的 .spec.ports[*].nodePort
字段中报告。
只需更新所有主控的配置,您就可以分配任何端口。
关于第二个问题: 我建议你在 github, 上创建一个问题,因为它看起来像一个错误,在文档中没有使用 nodePort 的限制。