sso单点登录ip地址

F5负载均衡,实例是sso单点登录,需要通过F5获取到当前服务真实ip地址。

该回答引用GPT与博主@晓码自在合作编写:

在F5负载均衡环境中,要获取后端真实服务器的IP地址,可以通过以下几种方式:

  1. X-Forwarded-For header: F5会在转发请求时添加该header,其中包含客户端IP和F5到服务器的所有中间IP地址。可以从该header中提取服务器IP。
  2. 使用F5 iRules: F5 iRules是F5设备上的可编程策略,可以检测X-Forwarded-For header并提取服务器IP,将其存储在session变量或HTTP header中传递给服务器。
  3. SNAT映射表: F5会记录SNAT IP和服务器IP的映射关系,可以通过API查询该映射表获取服务器IP。
  4. iControl API: 通过F5 iControl API可以直接读取Virtual Server列表和其关联的服务器IP信息。
  5. 自定义HTTP header: 可以在F5中配置添加自定义HTTP header,并设置其值为服务器IP,传递给服务器。

根据您的场景,我推荐使用iRules或iControl API的方式。其实现方法如下:

  1. iRules:
tcl
when HTTP_REQUEST { 
   # 获取X-Forwarded-For header
   set serverside_ip [HTTP::header "X-Forwarded-For"]
   # 解析出最后一个IP地址,即服务器IP 
   set serverside_ip [lindex $serverside_ip end]  
   # 添加Server-IP header
   HTTP::header insert Server-IP $serverside_ip 
}

  1. iControl API:

可以使用F5 REST API查询Virtual Server和Pool成员信息,示例Python代码如下:

python
import requests

url = "https://admin:password@lb_mgmt_ip/mgmt/tm/ltm/virtual"
response = requests.get(url)
vir_info = response.json()

for virtual in vir_info["items"]:
    pool_name = virtual["destination"]  # Pool Name
    pool_url = "https://admin:password@lb_mgmt_ip/mgmt/tm/ltm/pool/" + pool_name + "/members"
    pool_response = requests.get(pool_url)
    pool_members = pool_response.json()
    for member in pool_members["items"]:
        server_ip = member["address"]
        # Use server_ip ...

以上就是在F5负载均衡中获取后端服务器真实IP地址的几种方法。