【问题标题】:Can swagger-UI work for services inside kubernetes?swagger-UI 可以在 kubernetes 中为服务工作吗?
【发布时间】:2020-07-16 09:54:11
【问题描述】:

我在 Kubernetes 集群中运行了一些微服务。每个服务都有自己的 API 和对应的swagger.json

我正在考虑在 kubernetes 中部署一个 swagger-ui pod 来显示这些 swagger.json 并执行 API。

试了一下,发现:

  1. swagger-ui 找不到服务的swagger.jsons。尽管 swagger-ui pod 可以解析服务器的 dns 名称,但我的浏览器不能。似乎代码在浏览器而不是 pod 中运行。
  2. 出于与运行代码的浏览器相同的原因,swagger-ui 不能用于执行 API,因为无法从外部 kubernetes 访问服务。

所以我的问题是,

  1. 有没有办法让 swagger-ui 在 pod 内运行代码?以便它可以访问服务并执行其 api?
  2. 如果我们不使用 swagger-ui,是否有任何方法可以通过 webui 执行 kubernetes 服务的 api?

非常感谢!

【问题讨论】:

  • 你找到这个问题的答案了吗?我遇到了同样的问题。
  • @Trevor,对不起,我没有。目前我正在使用 pod 作为 swagger-ui 门户,例如 API 网关。
  • 我最终使用了一个入口控制器来解决这个确切的问题。我以这篇文章为例medium.com/@Oskarr3/setting-up-ingress-on-minikube-6ae825e98f82

标签: kubernetes swagger swagger-ui


【解决方案1】:

有没有办法让 swagger-ui 在 pod 内运行代码?使它 可以访问服务并执行它们的 api?

您可以将 JSON 文件公开或共享给 swagger POD,并且 swagger UI 可以为这些文件提供服务,这是一种可能的方式。但是,在 K8s 中设置 RWM(Read-write many)设置 NFS 并在彼此之间共享 pods 文件系统并不是一个好主意。

有什么方法可以通过 webui 执行 kubernetes 服务的 api, 如果我们不使用 swagger-ui?

你也可以试试 ReDoc:https://github.com/Redocly/redoc

这也类似于 swagger 在下面的 github repo 中也有适用于两者的示例。

要在 Kubernetes 中运行 swagger,您可以尝试

从文件系统或从 URL 获取文件有两种方式。

例如,如果您期待运行 swagger UI 的部署。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: swagger-ui
  labels:
    app: swagger-ui
spec:
  replicas: 1
  selector:
    matchLabels:
      app: swagger-ui
  template:
    metadata:
      labels:
        app: swagger-ui
    spec:
      containers:
      - name: swagger-ui
        image: swaggerapi/swagger-ui #build new image for adding local swaggerfile
        ports:
        - containerPort: 8080
        env:
        - name: BASE_URL
          value: /
        - name: API_URLS
          value: >-
            [
            {url:'https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/petstore.yaml',name:'Pet Store Example'},
            {url:'https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v3.0/uspto.yaml',name:'USPTO'},
            {url:'/example-swagger.yaml',name:'Local Example'} 
            ]

https://github.com/harsh4870/Central-API-Documentation-kubernetes

您还可以阅读有关新人的信息:https://azevedorafaela.com/2018/12/18/how-to-test-internal-microservices-in-a-kubernetes-cluster/

【讨论】:

【解决方案2】:
  1. 我在这里解决了:https://stackoverflow.com/a/68798178/12877180

  2. 通过webui使用名字来执行kubernetes服务可以通过使用nginx反向代理mechanizm来实现。

https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

此机制会将您从浏览器级别调用的 API 请求重定向到运行 nginx 服务器的内部集群服务名称。

一个示例 nginx 配置

server {
  listen 80;

  location /api/ {
    proxy_pass http://<service-name>.<namespace>:<port>;
  }

  location / {
    root /usr/share/nginx/html;
    index index.html;
    add_header 'Access-Control-Allow-Origin' '*';
    try_files $uri $uri/ /index.html =404;
  }
}

在上面的示例中,您的所有.../api/... 呼叫都将被重定向到http://&lt;service-name&gt;.&lt;namespace&gt;:&lt;port&gt;/api/..。端点。

不幸的是,我不知道如何使用 Swagger-UI 实现相同的目标

注意

如果 proxy_pass url 以“/”结尾,则位置 url ex。 '/api/' 不会添加到所需的 url。

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多