kong网关启用jwt认证插件

认证流程:
1、创建一个用户
2、生成jwt的所需要的key和密钥
3、在https://jwt.io/的生成jwt token
4、启用jwt插件
5、发送请求的时候携带jwt的token信息
官方指导:https://docs.konghq.com/hub/kong-inc/jwt/configuration/examples/

一、创建一个新的用户

[root@min ~]# curl -X POST http://localhost:8001/consumers/ --data username=jwtuser
{"created_at":1685478265,"custom_id":null,"username":"jwtuser","tags":null,"type":0,"id":"12cd3aa4-dac3-432a-b401-35820a2fc4d5","username_lower":"jwtuser","updated_at":1685478265}

二、生成jwt的所需要的key和密钥

[root@min ~]# curl -X POST http://localhost:8001/consumers/jwtuser/jwt 
{"created_at":1685478442,"consumer":{"id":"12cd3aa4-dac3-432a-b401-35820a2fc4d5"},"tags":null,"key":"64Lwa8LvHKVw8sPhguxD3V64I2CF6Aek","id":"0577790e-4d96-4fca-9050-c14397a3723e","algorithm":"HS256","secret":"ICk6bhhl7B8Dun2KFWeMkafUB7MDTuTm","rsa_public_key":null}

三、在https://jwt.io/的生成jwt token

生成的jwt对应token为eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI2NEx3YThMdkhLVnc4c1BoZ3V4RDNWNjRJMkNGNkFlayJ9.gg8qekmA9UR5I3m-BTZjm5rt9lcPfaKoXwd0DS0d-VI

在这里插入图片描述

四、启用jwt插件

这里我们通过http://localhost:8001/plugins/接口来进行启用jwt插件

[root@min ~]# curl -X POST http://localhost:8001/plugins/ \
>     --data "name=jwt"  \
>     --data "config.uri_param_names=paramName_2.2.x"
{"created_at":1685478938,"consumer":null,"protocols":["grpc","grpcs","http","https"],"updated_at":1685478938,"ordering":null,"enabled":true,"instance_name":null,"id":"be82a370-90ec-4237-b2a5-0ae32e1e5e12","service":null,"name":"jwt","tags":null,"config":{"maximum_expiration":0,"run_on_preflight":true,"claims_to_verify":null,"key_claim_name":"iss","anonymous":null,"header_names":["authorization"],"secret_is_base64":false,"cookie_names":[],"uri_param_names":["paramName_2.2.x"]},"route":null}

创建成功后,就可以在konga的控制面板上新增了jwt的插件

在这里插入图片描述

五、发送请求的时候携带jwt的token信息

5.1、采用在请求头中携带jwt 鉴权信息

  header头的key为:Authorization,value为:Bearer   +  第二步中生成的token信息

在这里插入图片描述

5.2、 采用请求参数中携带

在这里插入图片描述

5.3、使用cookie携带

携带cookie前先需要开启插件使用cookie的携带能力
在这里插入图片描述
功能启用后,那么在Cookie中携带
在这里插入图片描述

<think>好的,我现在需要帮用户找一个Kong网关和容器网络结合的组网案例。首先,我需要回顾之前用户的问题,他们之前询问过容器网络如何接入物理网络以及Kong网关的基本概念。现在用户希望有一个具体的组网案例,可能需要一个实际应用的例子来更好地理解两者如何协同工作。 首先,我得明确用户的需求。他们可能是在搭建一个基于容器的微服务架构,需要一个网关来处理流量,同时需要容器网络能够和物理网络互通。用户可能对如何将Kong部署到这样的环境中,以及网络配置的具体步骤感兴趣。 接下来,我需要回忆Kong网关的常见部署方式。Kong可以作为Kubernetes的Ingress Controller,或者作为独立的网关服务。而容器网络方面,可能需要选择覆盖网络如Calico或Flannel,或者路由直通的方式,比如BGP。这里需要选择一个典型的场景,比如在Kubernetes集群中使用Calico作为网络插件,结合Kong Ingress Controller来管理外部流量。 然后,考虑具体的组网架构。可能需要描述各个组件的位置,比如Kong部署在集群内部还是外部,如何暴露服务,以及网络流量如何流动。同时,需要考虑安全组、负载均衡器的配置,以及可能的插件使用,比如限流、认证等。 另外,用户可能希望案例中有具体的配置步骤或命令示例,比如如何部署Kong,如何定义Ingress资源,以及如何配置Calico的网络策略。不过,用户的问题并没有明确要求详细步骤,所以可能需要保持案例的高层次描述,但提供足够的细节让用户理解流程。 还需要注意用户提到的“容器网络”可能指的是容器之间的网络通信,而“物理网络”则是底层的基础设施网络。因此,案例中需要展示容器如何通过Kong网关与外部通信,同时确保网络策略和安全措施到位。 可能存在的挑战是确保网络配置正确,比如Calico的BGP配置是否正确与物理路由器对等,Kong的Ingress规则是否正确路由到后端服务。此外,需要考虑高可用性,比如Kong的多个实例和负载均衡器的设置。 最后,总结案例的关键点,强调Kong作为流量入口的优势,以及Calico提供的网络性能和策略管理能力。这可以帮助用户理解为什么选择这样的组合,以及它们如何解决实际问题。</think>--- ### Kong网关与容器网络组网案例:Kubernetes + Calico + Kong #### **场景背景** 某企业需将内部微服务迁移至Kubernetes集群,要求: 1. 外部用户通过统一域名访问服务(如 `api.example.com`)。 2. 容器跨节点通信需高性能,避免隧道开销。 3. 实现API限流、JWT鉴权等安全策略。 --- #### **架构设计** | 组件 | 角色说明 | |-----------------|----------------------------------| | **Kubernetes** | 容器编排平台,部署微服务Pod | | **Calico** | 容器网络插件,基于BGP路由直通 | | **Kong** | API网关Kong Ingress Controller)| | **MetalLB** | 裸机负载均衡器,对外暴露Kong服务 | --- #### **组网流程** ##### **1. 容器网络搭建(Calico)** - **目标**:实现跨节点容器直接路由。 - **配置步骤**: 1. 部署Kubernetes集群,安装Calico网络插件。 2. 配置Calico使用**BGP模式**,与物理路由器建立对等连接。 ```bash # 示例:Calico BGP配置(Node配置) apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: peer-to-router spec: peerIP: 192.168.100.1 # 物理路由器IP asNumber: 64512 # 路由器AS号 ``` 3. 物理路由器学习到容器子网路由(如 `10.244.0.0/16`),直接转发流量到对应节点。 --- ##### **2. 部署Kong网关** - **目标**:作为集群入口,管理API流量。 - **部署方式**: 1. 通过Helm安装Kong Ingress Controller: ```bash helm repo add kong https://charts.konghq.com helm install kong kong/kong -n kong --create-namespace \ --set ingressController.installCRDs=false ``` 2. 使用**MetalLB**为Kong Service分配外部IP(如 `192.168.100.100`): ```yaml # kong-service.yaml apiVersion: v1 kind: Service metadata: name: kong-proxy annotations: metallb.universe.tf/address-pool: public-ips spec: ports: - name: http port: 80 targetPort: 8000 - name: https port: 443 targetPort: 8443 type: LoadBalancer ``` --- ##### **3. 配置API路由与策略** - **目标**:将 `api.example.com` 的请求路由到后端服务,并启用安全插件。 - **操作步骤**: 1. 部署后端服务(如 `user-service`),并通过ClusterIP暴露。 2. 创建Kong Ingress规则: ```yaml # ingress.yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: api-ingress annotations: konghq.com/strip-path: "true" konghq.com/plugins: jwt-auth, rate-limiting spec: ingressClassName: kong rules: - host: api.example.com http: paths: - path: /users pathType: Prefix backend: service: name: user-service port: number: 80 ``` 3. 启用Kong插件(限流+JWT鉴权): ```bash # 创建限流插件 kubectl apply -f - <<EOF apiVersion: configuration.konghq.com/v1 kind: KongClusterPlugin metadata: name: global-rate-limit annotations: kubernetes.io/ingress.class: kong plugin: rate-limiting config: minute: 100 policy: local EOF ``` --- ##### **4. 外部访问验证** 1. 用户访问 `http://api.example.com/users`,DNS解析到MetalLB分配的IP `192.168.100.100`。 2. Kong网关接收请求,验证JWT令牌并检查限流策略。 3. 请求通过Calico路由直达后端Pod(无隧道封装),响应返回用户。 --- #### **关键技术点** | 组件 | 解决的问题 | |------------|-----------------------------------| | **Calico** | 容器跨节点直连,避免VXLAN性能损耗 | | **Kong** | 统一入口、安全策略、流量治理 | | **MetalLB**| 在裸机环境提供负载均衡IP分配 | --- #### **扩展优化** 1. **高可用**:部署多个Kong实例,通过Keepalived实现VIP漂移。 2. **监控**:集成Prometheus监控Kong的请求延迟、错误率。 3. **网络策略**:通过Calico NetworkPolicy限制Pod间通信。 --- ### 总结 该方案通过 **Calico BGP路由** 实现高性能容器网络,结合 **Kong网关** 统一管理API流量,适合需要低延迟、高安全性的企业级微服务场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值