当前位置: 首页 > 知识库问答 >
问题:

在Kubernetes&Istio中使用Pact-Broker支持反向代理和URL重写

慕嘉运
2023-03-14

我通过以下部署在本地Kubernetes集群中部署了pact-broker docker映像(最新版本)。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-pact-broker
...
    spec:
      containers:
      - name: my-pact-broker
        image: pactfoundation/pact-broker
        ports:
          - containerPort: 9292
        env:
        - name: PACT_BROKER_ALLOW_PUBLIC_READ
          value: "true"
        - name: PACT_BROKER_BASIC_AUTH_USERNAME
          value: "****"
        - name: PACT_BROKER_BASIC_AUTH_PASSWORD
          value: "****
        - name: PACT_BROKER_PORT 
          value: "9292"   
        - name: PACT_BROKER_LOG_LEVEL
          value: "DEBUG"
        - name: PACT_BROKER_SQL_LOG_LEVEL
          value: "DEBUG"
... 

为istio入口控制器配置了虚拟服务

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-pact-broker
  namespace: default
spec:

.....

  http:
    - match:
        - uri:
            prefix: /pactbroker/
        - uri:
            prefix: /pactbroker            
      rewrite:
        uri: /
      route:    
        - destination:
            port:
              number: 9292
            host: my-pact-broker.default.svc.cluster.local
          headers:
            request:
              add:
                X-Forwarded-Scheme: "https"
                X-Forwarded-Host: "my-domain.com"
                X-Forwarded-Port: "80"

pact-broker api工作良好。我成功地将协议发布到https://my-domain.com/pactbroker/pacts/provider/test-provider/consumer/test-consumer/version/1.0.0

问题出在pact-broker UI上。请求https://my-domain.com/pactbroker时,响应不完整。资源指向root。

...
<body>
<link href='/stylesheets/index.css' rel='stylesheet'>
<link href='/stylesheets/material-menu.css' rel='stylesheet'>
<link href='/stylesheets/material-icon.css' rel='stylesheet'>
<link href='/stylesheets/jquery-confirm.min.css' rel='stylesheet'>
<script src='/javascripts/jquery.tablesorter.min.js' type='text/javascript'></script>
<script src='/javascripts/material-menu.js' type='text/javascript'></script>
<script src='/javascripts/index.js' type='text/javascript'></script>
<script src='/javascripts/clipboard.js' type='text/javascript'></script>
<script src='/javascripts/jquery-confirm.min.js' type='text/javascript'></script>

<div class='container'>
<nav class='navbase-default' id='navigation' role='navigation'>
<div class='container-fluid'>
<div class='navbar-header'></div>
<ul class='navbar-right' id='top-left-menu'>
<li>
<a href='?tags=true'>
Show latest tags
</a>
<a href='/hal-browser/browser.html'>
API Browser
</a>
</li>
</ul>
</div>
</nav>
....
  • https://my-domain.org/pacts/provider//consumer//version/

我要怎么做才能让这件事正常运转。

共有1个答案

缪兴腾
2023-03-14

我在pact-broker项目的变更日志中找到了丢失的信息。

添加环境变量PACT_BROKER_BASE_URL修复了该问题

        - name: "PACT_BROKER_BASE_URL"
          value: "https://my-domain.com/pactbroker"
 类似资料:
  • 我使用JUnit生成协议和Pacts maven插件将协议发布到协议代理中。我正在使用下面的插件配置 当Consumenr协议在broker中上传时,我只能看到2.0版的consumer协议的单个条目。Eirlier我已经上传了1.0版本Eirlier,它没有出现在UI中。有没有办法在HAL浏览器中看到多个版本的同一提供者协议,并通过Https get请求获得不同版本的协议?目前,我只得到最新的消

  • 我是Kubernetes的新手,想了解如何向外部世界公开在Kubernetes中运行的服务。我已经使用集群上的节点端口公开了它。例如:一个服务在主机上公开端口31234,我可以通过https://kubeserverip:31234从另一个服务器访问该服务。

  • 如果您想使用 Nginx 作为 Gitea 的反向代理服务,您可以参照以下 nginx.conf 配置中 server 的 http 部分: server { listen 80; server_name git.example.com; location / { proxy_pass http://localhost:3000; } } 使用

  • 金属(版本0.7.3) Kubernetes(版本1.12.2) ISTIO(版本1.0.3) 我会从什么起作用开始。 所有补充服务均已部署,大部分正在工作: null 网关 虚拟服务 我仔细检查了一下,这不是DNS的问题,因为我可以通过busybox或使用K8S仪表板进入入口网关的shell

  • 似乎我缺少了一些重要的东西,但我看不到在以下示例中给出的URI中可以为我的契约提供徽章:https://github.com/pact-foundation/pact_broker/wiki/provider-verification-badges 即:https://your-broker/pacts/provider/provider/consumer/consumer/latest/badg

  • 在你的Pact之旅上,一定有些时候会生成许多Pact文件供提供者进行验证,而且要确保提供者访问的总是最新版本的契约文件。这当然很棒,但是很快就会繁琐到难于管理。 Pact Broker 这时就该Pact Broker登场了。它能够让你在项目之间共享契约,还可以让这些契约为人所用。它是正式使用Pact开发时的推荐方式,具有如下特性: 自动生成接口文档 动态生成调用关系网络图 对Pact打标签的能力