1.7. 从本地机器公开服务网络上的服务


创建服务网络后,您可以从服务网络上的本地机器公开服务。

例如,如果您在数据中心的服务器上运行数据库,您可以在一个集群中部署一个前端,该数据库可以访问数据,就像数据库在集群中运行一样。

1.7.1. 向服务网络公开简单的本地服务

本节介绍如何公开在服务网络中本地运行的单个服务。

先决条件

  • 服务网络。只需要一个站点。
  • 访问服务网络。
  • skrouterd 用于默认 服务类型 网关

流程

  1. 在本地运行您的服务。
  2. 登录到集群并更改到您的站点的命名空间。
  3. 在服务网络中公开服务:

    $ skupper gateway expose <service> localhost <port>
    Copy to Clipboard Toggle word wrap
    • <service> - 服务网络上的服务名称。
    • <port> - 在本地运行该服务的端口。
    注意

    您还可以从本地网络上的其他机器公开服务,例如,如果 MySQL 在专用服务器上运行(IP 地址为 192.168.1.200),但您要从同一网络中的机器访问集群:

    $ skupper gateway expose mysql 192.168.1.200 3306
    Copy to Clipboard Toggle word wrap
  4. 检查 Skupper 网关的状态:

    $ skupper gateway status
    
    Gateway Definition:
    ╰─ machine-user type:service version:2.2.1.redhat.1.1.0-2
       ╰─ Bindings:
          ╰─ mydb:3306 tcp mydb:3306 localhost 3306
    Copy to Clipboard Toggle word wrap

    这表明只有一个公开的服务,该服务只公开一个端口(BIND)。没有端口转发到本地主机。

    URL 字段显示底层通信,可以忽略。

1.7.2. 在服务网络上使用复杂的本地服务

本节显示 skupper 网关的更多高级用法。

  1. 创建 Skupper 网关:

    $ skupper gateway init --type <gateway-type>
    Copy to Clipboard Toggle word wrap
    注意

    核心服务类型网关要求 skrouterd 正在运行。

    默认情况下创建 服务类型 网关,但您也可以指定:

    • podman
    • docker
  2. 创建可在服务网络中进行通信的服务:

    $ skupper service create <name> <port>
    Copy to Clipboard Toggle word wrap

    其中

    • &lt;name> 是您要创建的服务的名称
    • <port > 是服务使用的端口

    例如:

    $ skupper service create mydb 3306
    Copy to Clipboard Toggle word wrap
  3. 在服务网络中绑定服务:

    $ skupper gateway bind <service> <host> <port>
    Copy to Clipboard Toggle word wrap
    • <service> - 服务网络上的服务名称,上例中的 mydb
    • <host> - 运行该服务的主机。
    • <port> - 服务在上例中运行的端口 3306
  4. 检查 Skupper 网关的状态:

    $ skupper gateway status
    Gateway Definitions Summary
    
    Gateway Definition:
    ╰─ machine-user type:service version:2.2.1.redhat.1.1.0-2
       ╰─ Bindings:
          ╰─ mydb:3306 tcp mydb:3306 localhost 3306
    Copy to Clipboard Toggle word wrap

    这表明只有一个公开的服务,该服务只公开一个端口(BIND)。没有端口转发到本地主机。

    URL 字段显示底层通信,可以忽略。

    您可以在服务网络中创建更多服务,并绑定更多本地服务来公开服务网络上的这些服务。

  5. 将服务从服务网络转发到本地计算机。

    $ skupper gateway forward <service> <port>
    Copy to Clipboard Toggle word wrap

    其中

    • <service > 是服务网络上的现有服务的名称。
    • &lt;port> 是您要使用的本地机器上的端口。

1.7.3. 创建网关并在不同的机器上应用它

如果可以从一台机器访问集群,但希望从其他机器创建到服务网络的网关,您可以在第一个机器上创建网关定义捆绑包,稍后将该定义捆绑包应用到第二个机器上,如此过程中所述。例如,如果要将本地数据库服务公开给服务网络,但您不想从数据库服务器访问集群,您可以使用此流程创建定义捆绑包并将其应用到数据库服务器。

流程

  1. 从第一个机器登录到集群,并更改到您的站点的命名空间。
  2. 创建可在服务网络中进行通信的服务:

    $ skupper service create <name> <port>
    Copy to Clipboard Toggle word wrap

    其中

    • &lt;name> 是您要创建的服务的名称
    • <port > 是服务使用的端口

    例如:

    $ skupper service create database 5432
    Copy to Clipboard Toggle word wrap
  3. 创建一个 YAML 文件来代表您要公开的服务,例如:

    name: database 
    1
    
    bindings:
        - name: database 
    2
    
          host: localhost 
    3
    
          service:
            address: database:5432 
    4
    
            protocol: tcp 
    5
    
            ports:
                - 5432 
    6
    
          target_ports:
            - 5432 
    7
    
    qdr-listeners:
        - name: amqp
          host: localhost
          port: 5672
    Copy to Clipboard Toggle word wrap
    1
    网关名称,仅适用于参考。
    2
    绑定名称,用于跟踪多个绑定。
    3
    提供您要公开的服务的主机的名称。
    4
    服务网络上的服务名称和端口。您上一步创建了服务。
    5
    您要用来公开服务、tcphttphttp2 的协议。
    6
    您希望此服务可用的服务网络上的端口。
    7
    在点 3 中指定的主机上运行的服务的端口。
  4. 使用网关的名称保存 YAML 文件,如 gateway.yaml
  5. 生成可应用于托管要在服务网络上公开服务的机器的捆绑包:

    $ skupper gateway generate-bundle <config-filename> <destination-directory>
    Copy to Clipboard Toggle word wrap

    其中:

    • <config-filename> - YAML 文件的名称,包括您在上一步中生成的后缀。
    • <destination-directory> - 要保存生成的网关捆绑包的位置,如 ~/gateways

    例如:

    $ skupper gateway generate-bundle database.yaml ./
    Copy to Clipboard Toggle word wrap

    此捆绑包包含网关定义 YAML 和允许访问服务网络的证书。

  6. 将网关定义文件(如 mylaptop-jdoe.tar.gz )复制到托管要在服务网络上公开的服务的机器。
  7. 从托管您要公开的服务的机器中:

    $ mkdir gateway
    
    $ tar -xvf <gateway-definition-file> --directory gateway
    $ cd gateway
    $ sh ./launch.py
    Copy to Clipboard Toggle word wrap
    注意

    使用 ./launch.py -t podman./launch.py -t docker 来在容器中运行 Skupper 路由器。

    运行网关捆绑包使用网关定义 YAML 和证书来访问服务网络上的服务。

  8. 检查网关服务的状态:

    检查 服务类型 gateway :

    $ systemctl --user status <gateway-definition-name>
    Copy to Clipboard Toggle word wrap

    检查 podman 类型 gateway:

    $ podman inspect
    Copy to Clipboard Toggle word wrap

    检查 docker 类型网关:

    $ docker inspect
    Copy to Clipboard Toggle word wrap
    注意

    之后,您可以使用 ./remove.py 删除网关。

  9. 在具有集群访问权限的机器中,检查 Skupper 网关的状态:

    $ skupper gateway status
    Gateway Definition:
    ╰─ machine-user type:service version:2.2.1.redhat.1.1.0-2
       ╰─ Bindings:
          ╰─ mydb:3306 tcp mydb:3306 localhost 3306
    Copy to Clipboard Toggle word wrap

    这表明只有一个公开的服务,该服务只公开一个端口(BIND)。没有端口转发到本地主机。

注意

如果您需要更改网关定义,例如要更改端口,您需要删除现有网关,并从开始重复这个过程以重新定义网关。

1.7.4. 网关 YAML 参考

第 1.7.3 节 “创建网关并在不同的机器上应用它” 描述如何创建网关以应用到使用网关定义 YAML 文件的独立机器上。

以下是网关定义 YAML 文件中的有效条目:

name
网关的名称
bindings.name
单个主机的绑定名称。
bindings.host
本地服务的主机名。
bindings.service
您希望在服务网络上可用的服务定义。
bindings.service.address
服务网络上的地址、名称和端口。
bindings.service.protocol
Skupper 协议、tcphttphttp2
bindings.service.ports
在服务网络上可用的单个端口。
bindings.service.target_ports
要在服务网络上公开的单一端口。
注意

如果本地服务需要多个端口,请为每个端口创建单独的绑定。

forwards.name
单个主机的转发名称。
forwards.host
本地服务的主机名。
forwards.service
您希望在本地可用的服务定义。
forwards.service.address
您要在本地、名称和端口的服务网络上的地址。
forwards.service.protocol
Skupper 协议、tcphttphttp2
forwards.service.ports
服务网络上可用的单个端口。
forwards.service.target_ports
您要在本地使用的单个端口。
注意

如果网络服务需要多个端口,请为每个端口创建单独的转发。

qdr-listeners
skupper 路由器监听程序的定义
qdr-listeners.name
skupper 路由器的名称,通常为 amqp
qdr-listeners.host
skupper 路由器的主机名,通常为 localhost
qdr-listeners.port
skupper 路由器的端口,通常为 5672
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部