温馨提示×

Linux中Swagger与Kubernetes如何结合使用

小樊
39
2025-09-18 07:01:50
栏目: 智能运维

Linux环境下Swagger与Kubernetes结合使用的实践指南

在Linux系统中,Swagger(OpenAPI规范的可视化工具)与Kubernetes的结合主要围绕Kubernetes API文档的可视化集群内自定义API的服务化展开。以下是具体实现步骤及注意事项:

一、Kubernetes API文档的可视化(快速查看集群原生API)

若需快速查看Kubernetes集群的原生API(如Pod、Deployment等资源),可通过以下步骤将集群API文档暴露给Swagger UI:

1. 启动Kubernetes API反向代理

使用kubectl proxy命令在本地启动一个反向代理,将Kubernetes API服务器的安全端点映射到本地端口(默认8080)。此步骤无需集群认证(仅适用于本地开发环境):

kubectl proxy --port=8080 

2. 获取集群OpenAPI文档

通过curl命令从代理地址获取Kubernetes集群的OpenAPI规范(openapi/v2版本),并保存为本地JSON文件:

curl http://localhost:8080/openapi/v2 -o k8s-swagger.json 

该文件包含了Kubernetes集群所有原生资源的API定义(如路径、参数、响应结构等)。

3. 部署Swagger UI容器

使用Docker运行Swagger UI容器,将本地生成的k8s-swagger.json文件挂载到容器中,并暴露80端口供浏览器访问:

docker run --rm -p 80:8080 -e SWAGGER_JSON=/k8s-swagger.json -v $(pwd)/k8s-swagger.json:/k8s-swagger.json swaggerapi/swagger-ui 
  • -e SWAGGER_JSON:指定Swagger UI加载的API文档路径;
  • -v:将本地JSON文件挂载到容器内的对应路径。

4. 访问Swagger UI界面

在浏览器中输入http://localhost,即可看到Kubernetes集群的所有原生资源及API操作(如GET /api/v1/podsPOST /apis/apps/v1/deployments等)。通过界面可直接发送请求,调试集群资源。

二、自定义API的服务化部署(Swagger UI整合业务API)

若需将业务系统的API(如Spring Boot、Node.js等应用)部署到Kubernetes,并通过Swagger UI统一管理,需完成以下步骤:

1. 编写OpenAPI规范文件

使用Swagger Editor或代码生成工具(如swagger-codegen)编写API规范文件(swagger.yamlswagger.json),定义API的路径、参数、响应结构及组件(如数据模型)。示例如下:

openapi: 3.0.0 info: title: Sample API version: 1.0.0 servers: - url: http://localhost:8000 # 业务API的实际地址 paths: /users: get: summary: Get all users responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/User' components: schemas: User: type: object properties: id: type: integer name: type: string 

2. 部署业务API到Kubernetes

将业务应用打包为Docker镜像(如simple-api),并通过Kubernetes的DeploymentService资源部署到集群:

  • Deployment配置deployment.yaml):定义应用副本数、容器镜像及端口:
    apiVersion: apps/v1 kind: Deployment metadata: name: simple-api-deployment spec: replicas: 3 selector: matchLabels: app: simple-api template: metadata: labels: app: simple-api spec: containers: - name: simple-api image: simple-api:latest # 替换为实际镜像 ports: - containerPort: 3000 # 应用监听端口 
  • Service配置service.yaml):将集群内部流量导向业务Pod:
    apiVersion: v1 kind: Service metadata: name: simple-api-service spec: selector: app: simple-api ports: - protocol: TCP port: 80 targetPort: 3000 # 对应容器端口 type: ClusterIP # 集群内部访问 

执行以下命令部署:

kubectl apply -f deployment.yaml kubectl apply -f service.yaml 

3. 部署Swagger UI到Kubernetes

通过DeploymentService资源将Swagger UI部署到集群,使其能够访问业务API的OpenAPI规范:

  • Deployment配置swagger-ui-deployment.yaml):使用官方Swagger UI镜像:
    apiVersion: apps/v1 kind: Deployment metadata: name: 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:latest ports: - containerPort: 8080 env: - name: SWAGGER_JSON # 指向业务API的OpenAPI规范地址 value: "/app/swagger.yaml" volumeMounts: - name: swagger-volume mountPath: "/app" volumes: - name: swagger-volume configMap: name: swagger-config 
  • ConfigMap配置swagger-config.yaml):将swagger.yaml文件挂载为ConfigMap:
    kubectl create configmap swagger-config --from-file=swagger.yaml 
  • Service配置swagger-ui-service.yaml):暴露Swagger UI服务(可选择NodePortIngress):
    apiVersion: v1 kind: Service metadata: name: swagger-ui spec: selector: app: swagger-ui ports: - protocol: TCP port: 80 targetPort: 8080 type: NodePort # 或Ingress(推荐) 

执行以下命令部署:

kubectl apply -f swagger-ui-deployment.yaml kubectl apply -f swagger-ui-service.yaml 

4. 配置Ingress访问(可选,推荐)

若需通过域名访问Swagger UI,可创建Ingress资源(需集群已启用Ingress Controller,如Nginx):

apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: swagger-ui-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - host: swagger.example.com # 替换为实际域名 http: paths: - path: / pathType: Prefix backend: service: name: swagger-ui port: number: 80 

执行以下命令部署:

kubectl apply -f swagger-ui-ingress.yaml 

配置完成后,通过http://swagger.example.com即可访问Swagger UI界面,查看并调试业务API。

三、注意事项

  1. 认证与授权:若Kubernetes集群启用了RBAC或认证(如TLS证书),需在kubectl proxy或Swagger UI配置中添加认证信息(如--token参数或Authorization头),避免未授权访问。
  2. 自定义资源支持:若集群中有自定义资源定义(CRD),需确保OpenAPI文档包含CRD的路径和结构(可通过kubectl get crd获取CRD信息,并更新swagger.yaml)。
  3. 实时更新:修改swagger.yaml后,需重新创建ConfigMap并重启Swagger UI Pod(kubectl rollout restart deployment/swagger-ui),确保文档同步。
  4. 生产环境安全:生产环境中建议使用Ingress替代NodePort,并通过HTTPS加密流量(如使用Cert-Manager申请免费SSL证书);同时限制Swagger UI的访问权限(如仅允许内部网络或特定用户)。

通过以上步骤,可在Linux环境中实现Swagger与Kubernetes的有效结合,既方便查看集群原生API,又能统一管理业务API的文档与调试。

0