我可以通过Istio路由HTTP流量(例如,Elasticsearch和各种仪表板),但我无法通过原始TCP流量。下面我有两个例子(postgres和红熊猫)。我在内部使用postgres和kafka客户端访问底层服务(mypostgres.default.svc.cluster.local和three-node-cluster-0.three-node-cluster.redpanda-system.svc.cluster.local)没有问题。
我的网关:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: gateway
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- 'mydomain.cloud'
tls:
httpsRedirect: true
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- 'mydomain.cloud'
tls:
mode: SIMPLE
credentialName: letsencrypt-staging-tls
- port:
number: 9092
name: redpanda
protocol: TCP
hosts:
- 'mydomain.cloud'
- port:
number: 5432
name: postgres
protocol: TCP
hosts:
- 'mydomain.cloud'Postgres规范:
apiVersion: kubegres.reactive-tech.io/v1
kind: Kubegres
metadata:
name: mypostgres
namespace: postgres
spec:
replicas: 3
image: postgres:13.2
database:
size: 50Gi
storageClassName: postgres
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgressecret
key: superUserPassword
- name: POSTGRES_REPLICATION_PASSWORD
valueFrom:
secretKeyRef:
name: postgressecret
key: replicationUserPassword虚拟服务:
spec:
hosts:
- "*"
gateways:
- istio-system/gateway
tcp:
- match:
- port: 5432
route:
- destination:
host: mypostgres.default.svc.cluster.local
port:
number: 5432目的规则
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: postgres-destination-rule
namespace: default
spec:
host: mypostgres.default.svc.cluster.local
trafficPolicy:
tls:
mode: DISABLE红熊猫
apiVersion: redpanda.vectorized.io/v1alpha1
kind: Cluster
metadata:
name: three-node-cluster
spec:
image: "vectorized/redpanda"
version: "latest"
replicas: 2
resources:
requests:
cpu: 1
memory: 2Gi
limits:
cpu: 1
memory: 2Gi
configuration:
rpcServer:
port: 33145
kafkaApi:
- port: 9092
pandaproxyApi:
- port: 8082
adminApi:
- port: 9644
developerMode: true
storage:
storageClassName: redpanda虚拟服务
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: redpanda-vts
namespace: redpanda-system
spec:
hosts:
- "*"
gateways:
- istio-system/gateway
tcp:
- match:
- port: 9092
route:
- destination:
host: three-node-cluster-0.three-node-cluster.redpanda-system.svc.cluster.local
port:
number: 9092目的地规则:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: redpanda-destination-rule
namespace: redpanda-system
spec:
host: three-node-cluster-0.three-node-cluster.redpanda-system.svc.cluster.local
trafficPolicy:
tls:
mode: DISABLE有什么想法吗?我试过玩弄主机名,使用星号而不是域名,但没有效果。获得TLS将是另一天的斗争,但现在我只想让一些交通通过。
例如,下面的工作是在集群内部的RedPanda中使用标准kafka-python客户端
from kafka.admin import KafkaAdminClient, NewTopic
nodes = {'bootstrap.servers':'three-node-cluster-0.three-node-cluster.redpanda-system.svc.cluster.local, three-node-cluster-1.three-node-cluster.redpanda-system.svc.cluster.local'}
admin_client = KafkaAdminClient(
bootstrap_servers=nodes['bootstrap.servers'],
client_id='test'
)
topic_list = []
topic_list.append(NewTopic(name="test-topic", num_partitions=1, replication_factor=1))
admin_client.create_topics(new_topics=topic_list, validate_only=False)同样,我希望能够通过Istio从外部K8s执行以下操作:
from kafka.admin import KafkaAdminClient, NewTopic
nodes = {'bootstrap.servers':'mydomain.cloud/kafka'}
admin_client = KafkaAdminClient(
bootstrap_servers=nodes['bootstrap.servers'],
client_id='test'
)
topic_list = []
topic_list.append(NewTopic(name="test-topic", num_partitions=1, replication_factor=1))
admin_client.create_topics(new_topics=topic_list, validate_only=False)发布于 2022-02-09 17:34:03
基于有关Istio协议选择的文档
Istio支持代理任何TCP流量。这包括HTTP、HTTPS、gRPC以及原始的TCP协议。为了提供额外的功能,例如路由和丰富的度量,必须确定协议。这可以自动或显式指定。
对你的问题的答案应该在这个片段中
协议可以在服务定义中手动指定。 这可以通过两种方式配置:
name: <protocol>[-<suffix>]。appProtocol字段:appProtocol: <protocol>。注意,在某些情况下,网关的行为不同,因为网关可以终止TLS,协议可以协商。
看看yaml示例:
下面是通过
https定义appProtocol端口和按名称定义http端口的服务示例:
kind: Service
metadata:
name: myservice
spec:
ports:
- number: 3306
name: database
appProtocol: https <-change here 'https' to 'tcp'
- number: 80
name: http-web在您的情况下,尝试替换appProtocol: https并将appProtocol: tcp放在您的Service中
请记住,服务器第一协议(如MySQL )与自动协议选择不兼容。有关详细信息,请参阅服务器第一协议。
https://stackoverflow.com/questions/70894080
复制相似问题