首页
/ DefenseUnicorns UDS Core项目:配置非HTTP协议的Istio入口网关

DefenseUnicorns UDS Core项目:配置非HTTP协议的Istio入口网关

2025-06-19 18:00:03作者:滑思眉Philip

概述

在现代云原生架构中,服务网格技术如Istio已成为管理服务间通信的关键组件。DefenseUnicorns的UDS Core项目默认配置了处理HTTP/HTTPS流量的入口网关,但在实际生产环境中,我们经常需要支持其他协议的服务访问。本文将详细介绍如何在UDS Core项目中配置非HTTP协议(以SSH为例)的Istio入口网关。

核心概念理解

在开始配置前,我们需要明确几个关键概念:

  1. 入口网关(Ingress Gateway):作为集群的入口点,负责接收外部流量并将其路由到内部服务
  2. Gateway资源:定义网关应监听的端口、协议和主机名
  3. VirtualService资源:指定如何将传入请求路由到特定服务
  4. 网络策略(Network Policy):控制哪些流量被允许进入服务

配置步骤详解

第一步:配置负载均衡器端口

UDS Core默认只开放HTTP(80)和HTTPS(443)端口。要支持SSH协议,我们需要修改负载均衡器配置:

- name: core
  repository: ghcr.io/defenseunicorns/packages/uds/core
  ref: x.x.x
  overrides:
    istio-tenant-gateway:
      gateway:
        values:
          - path: "service.ports"
            value:
              # 必须包含默认端口配置
              - name: status-port
                port: 15021
                protocol: TCP
                targetPort: 15021
              - name: http2
                port: 80
                protocol: TCP
                targetPort: 80
              - name: https
                port: 443
                protocol: TCP
                targetPort: 443
              # 添加SSH端口配置
              - name: tcp-ssh
                port: 2022  # 外部暴露端口
                protocol: TCP
                targetPort: 22  # 网关内部路由端口

关键点说明

  • port是外部客户端访问时使用的端口
  • targetPort是网关内部监听的端口
  • 必须保留默认端口配置,否则会影响现有HTTP服务

第二步:创建Gateway资源

Gateway资源定义了网关应接受哪些主机的流量:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: example-ssh-gateway
  namespace: istio-tenant-gateway  # 必须与网关部署命名空间一致
spec:
  selector:
    app: tenant-ingressgateway  # 选择器必须匹配网关部署标签
  servers:
    - hosts:
        - example.uds.dev  # 你的服务域名
      port:
        name: tcp-ssh
        number: 22  # 必须与上一步的targetPort一致
        protocol: TCP

第三步:配置VirtualService路由

VirtualService将流量从网关路由到实际服务:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: example-ssh
  namespace: example  # 你的应用所在命名空间
spec:
  gateways:
    - istio-tenant-gateway/example-ssh-gateway  # 引用之前创建的Gateway
  hosts:
    - example.uds.dev
  tcp:  # 注意这里使用tcp而不是http
    - match:
        - port: 22  # 匹配的端口号
      route:
        - destination:
            host: example.example.svc.cluster.local  # 集群内服务地址
            port:
              number: 22  # 服务暴露的端口

第四步:配置网络策略

在严格网络策略环境下,需要显式允许入口流量:

spec:
  network:
    allow:
      - direction: Ingress
        selector:
          app: example  # 选择你的应用Pod
        remoteNamespace: istio-tenant-gateway  # 网关命名空间
        remoteSelector:
          app: tenant-ingressgateway  # 网关Pod标签
        port: 22  # 允许的端口
        description: "SSH Ingress"

验证配置

完成上述配置后,可以通过以下命令测试SSH连接:

ssh -p 2022 user@example.uds.dev

常见问题排查

  1. 连接被拒绝

    • 检查负载均衡器是否已正确配置新端口
    • 确认网络策略已允许该端口的流量
  2. 连接超时

    • 检查DNS解析是否正确指向负载均衡器
    • 确认目标服务正常运行并监听指定端口
  3. 协议不匹配

    • 确保Gateway和VirtualService中配置的协议类型一致
    • 对于非HTTP协议,必须使用TCP而不是HTTP

扩展应用

虽然本文以SSH为例,但这种方法适用于任何TCP协议的服务,包括:

  • 数据库协议(MySQL、PostgreSQL等)
  • 自定义二进制协议
  • 其他非HTTP的文本协议

只需将配置中的端口号和协议类型替换为你的服务实际使用的值即可。

总结

通过本文介绍的四个步骤,我们可以在UDS Core项目中成功配置非HTTP协议的入口访问。这种配置方式既保持了服务网格的安全性和可观测性优势,又扩展了对多样化协议的支持能力,是构建全面服务接入方案的重要技术手段。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
179
263
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
869
514
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
130
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
295
331
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
333
1.09 K
harmony-utilsharmony-utils
harmony-utils 一款功能丰富且极易上手的HarmonyOS工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志,异常捕获、字符、字符串、数字、集合、日期、随机、base64、加密、解密、JSON等一系列的功能和操作,能够满足各种不同的开发需求。
ArkTS
18
0
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.08 K
0
kernelkernel
deepin linux kernel
C
22
5
WxJavaWxJava
微信开发 Java SDK,支持微信支付、开放平台、公众号、视频号、企业微信、小程序等的后端开发,记得关注公众号及时接受版本更新信息,以及加入微信群进行深入讨论
Java
829
22
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
601
58