1. Endpoint 概念和作用
1.1 什么是 Endpoint
Endpoint 是 OpenStack 中服务的访问入口点,它定义了客户端如何找到和访问特定的 OpenStack 服务。每个 endpoint 包含了服务的 URL 地址、接口类型和区域信息。
1.2 Endpoint 的核心作用
- 服务发现: 客户端通过 endpoint 找到所需的服务
- 负载均衡: 支持多个 endpoint 实现服务的高可用
- 网络隔离: 不同接口类型支持不同的网络访问策略
- 多区域支持: 支持跨区域的服务访问
1.3 架构位置
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Client │ │ Keystone │ │ Service │
│ (CLI/API) │────│ (Identity) │────│ (Nova/Glance) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ │ │
└───────── Endpoint Discovery ─────────────────┘
2. Endpoint 的组成结构
2.1 基本组成要素
endpoint = {
'id': 'endpoint_uuid',
'service_id': 'service_uuid', # 关联的服务ID
'interface': 'public', # 接口类型
'url': 'http://192.168.1.10:8774/v2.1', # 服务URL
'region': 'RegionOne', # 区域
'enabled': True # 是否启用
}
2.2 接口类型详解
2.2.1 Public Interface
# 外部网络访问接口
# 适用场景:
# - 用户从外部网络访问
# - 公有云环境
# - 跨数据中心访问
# 示例
openstack endpoint create --region RegionOne \
compute public http://public.example.com:8774/v2.1
2.2.2 Internal Interface
# 内部网络访问接口
# 适用场景:
# - 服务间通信
# - 内部网络优化
# - 安全性要求高的场景
# 示例
openstack endpoint create --region RegionOne \
compute internal http://internal.example.com:8774/v2.1
2.2.3 Admin Interface
# 管理接口
# 适用场景:
# - 管理员操作
# - 系统维护
# - 特殊权限操作
# 示例
openstack endpoint create --region RegionOne \
compute admin http://admin.example.com:8774/v2.1
3. Endpoint 管理操作
3.1 查看 Endpoint
# 列出所有 endpoint
openstack endpoint list
# 查看特定服务的 endpoint
openstack endpoint list --service nova
# 查看特定区域的 endpoint
openstack endpoint list --region RegionOne
# 详细查看特定 endpoint
openstack endpoint show <endpoint-id>
# 格式化输出
openstack endpoint list -f table -c ID -c "Service Name" -c Interface -c URL
3.2 创建 Endpoint
# 基本创建语法
openstack endpoint create [options] <service> <interface> <url>
# 创建计算服务 endpoint
openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1
# 创建带所有接口的完整 endpoint
openstack endpoint create --region RegionOne \
compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne \
compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne \
compute admin http://controller:8774/v2.1
# 创建镜像服务 endpoint
openstack endpoint create --region RegionOne \
image public http://controller:9292
# 创建网络服务 endpoint
openstack endpoint create --region RegionOne \
network public http://controller:9696
3.3 更新 Endpoint
# 更新 endpoint URL
openstack endpoint set --url http://new-controller:8774/v2.1 <endpoint-id>
# 更新区域
openstack endpoint set --region RegionTwo <endpoint-id>
# 启用/禁用 endpoint
openstack endpoint set --enable <endpoint-id>
openstack endpoint set --disable <endpoint-id>
3.4 删除 Endpoint
# 删除特定 endpoint
openstack endpoint delete <endpoint-id>
# 批量删除(小心使用)
openstack endpoint list -f value -c ID --service nova | xargs openstack endpoint delete
4. 实际使用场景和配置
4.1 单节点部署配置
# 在单节点环境中,通常所有接口都指向同一个地址
CONTROLLER_IP="192.168.1.10"
# Keystone endpoint
openstack endpoint create --region RegionOne \
identity public http://$CONTROLLER_IP:5000/v3
openstack endpoint create --region RegionOne \
identity internal http://$CONTROLLER_IP:5000/v3
openstack endpoint create --region RegionOne \
identity admin http://$CONTROLLER_IP:5000/v3
# Nova endpoint
openstack endpoint create --region RegionOne \
compute public http://$CONTROLLER_IP:8774/v2.1
openstack endpoint create --region RegionOne \
compute internal http://$CONTROLLER_IP:8774/v2.1
openstack endpoint create --region RegionOne \
compute admin http://$CONTROLLER_IP:8774/v2.1
# Glance endpoint
openstack endpoint create --region RegionOne \
image public http://$CONTROLLER_IP:9292
openstack endpoint create --region RegionOne \
image internal http://$CONTROLLER_IP:9292
openstack endpoint create --region RegionOne \
image admin http://$CONTROLLER_IP:9292
4.2 多节点高可用配置
# 使用负载均衡器的配置
LOAD_BALANCER="lb.example.com"
INTERNAL_LB="internal-lb.example.com"
ADMIN_LB="admin-lb.example.com"
# 计算服务高可用 endpoint
openstack endpoint create --region RegionOne \
compute public http://$LOAD_BALANCER:8774/v2.1
openstack endpoint create --region RegionOne \
compute internal http://$INTERNAL_LB:8774/v2.1
openstack endpoint create --region RegionOne \
compute admin http://$ADMIN_LB:8774/v2.1
# 使用 HAProxy 配置示例
cat >> /etc/haproxy/haproxy.cfg << EOF
frontend nova-api
bind *:8774
default_backend nova-api-nodes
backend nova-api-nodes
balance roundrobin
server controller1 192.168.1.11:8774 check
server controller2 192.168.1.12:8774 check
server controller3 192.168.1.13:8774 check
EOF
4.3 多区域配置
# 区域一配置
openstack endpoint create --region RegionOne \
compute public http://region1-controller:8774/v2.1
# 区域二配置
openstack endpoint create --region RegionTwo \
compute public http://region2-controller:8774/v2.1
# 查看多区域配置
openstack endpoint list --region RegionOne
openstack endpoint list --region RegionTwo
5. 客户端如何使用 Endpoint
5.1 服务发现流程
# Python 客户端使用示例
from keystoneauth1 import loading
from keystoneauth1 import session
from novaclient import client
# 1. 认证获取 token
loader = loading.get_plugin_loader('password')
auth = loader.load_from_options(
auth_url='http://controller:5000/v3',
username='admin',
password='password',
project_name='admin',
user_domain_name='Default',
project_domain_name='Default'
)
# 2. 创建会话
sess = session.Session(auth=auth)
# 3. 客户端自动从 Keystone 获取 Nova endpoint
nova = client.Client('2.1', session=sess)
# 4. 进行 API 调用(自动使用发现的 endpoint)
servers = nova.servers.list()
5.2 手动指定 Endpoint
# 直接指定 endpoint
nova = client.Client(
'2.1',
session=sess,
endpoint_override='http://specific-nova-api:8774/v2.1'
)
# 指定接口类型
nova = client.Client(
'2.1',
session=sess,
interface='internal' # 使用 internal 接口
)
5.3 CLI 中的 Endpoint 使用
# OpenStack CLI 自动服务发现
export OS_AUTH_URL=http://controller:5000/v3
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=password
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
# CLI 会自动从 Keystone 获取 endpoint
openstack server list
# 指定接口类型
openstack --interface internal server list
# 指定区域
openstack --region RegionTwo server list
# 查看实际使用的 endpoint
openstack --debug server list 2>&1 | grep "REQ:"
6. Endpoint 模板和变量
6.1 URL 模板
# 使用变量的 endpoint URL
openstack endpoint create --region RegionOne \
compute public 'http://controller:8774/v2.1/$(tenant_id)s'
# 常用变量
# $(tenant_id)s - 租户ID
# $(user_id)s - 用户ID
# $(project_id)s - 项目ID
6.2 动态 Endpoint 配置
# keystone.conf 中的 endpoint 配置
[catalog]
driver = sql
template_file = /etc/keystone/default_catalog.templates
# default_catalog.templates 示例
catalog.RegionOne.identity.publicURL = http://$(public_bind_host)s:$(public_port)s/v3
catalog.RegionOne.identity.internalURL = http://$(admin_bind_host)s:$(admin_port)s/v3
catalog.RegionOne.identity.adminURL = http://$(admin_bind_host)s:$(admin_port)s/v3
catalog.RegionOne.compute.publicURL = http://$(public_bind_host)s:8774/v2.1/$(tenant_id)s
catalog.RegionOne.compute.internalURL = http://$(admin_bind_host)s:8774/v2.1/$(tenant_id)s
catalog.RegionOne.compute.adminURL = http://$(admin_bind_host)s:8774/v2.1/$(tenant_id)s
7. 故障排除和调试
7.1 常见问题诊断
# 检查 endpoint 配置
openstack endpoint list
openstack catalog list
# 测试 endpoint 连通性
curl -H "X-Auth-Token: $TOKEN" http://controller:8774/v2.1
# 检查服务状态
openstack service list
systemctl status openstack-nova-api
# 查看日志
tail -f /var/log/nova/nova-api.log
tail -f /var/log/keystone/keystone.log
7.2 调试工具和方法
# 详细调试模式
openstack --debug server list
# 检查认证和 endpoint 发现过程
python -c "
from keystoneauth1 import session
from keystoneauth1 import loading
loader = loading.get_plugin_loader('password')
auth = loader.load_from_options(
auth_url='http://controller:5000/v3',
username='admin', password='password',
project_name='admin',
user_domain_name='Default',
project_domain_name='Default'
)
sess = session.Session(auth=auth)
print('Nova endpoint:', sess.get_endpoint(service_type='compute'))
print('Glance endpoint:', sess.get_endpoint(service_type='image'))
"
7.3 性能监控
# 监控 endpoint 响应时间
curl -w "@curl-format.txt" -o /dev/null -s http://controller:8774/
# curl-format.txt 内容
# time_namelookup: %{time_namelookup}\n
# time_connect: %{time_connect}\n
# time_appconnect: %{time_appconnect}\n
# time_pretransfer: %{time_pretransfer}\n
# time_redirect: %{time_redirect}\n
# time_starttransfer: %{time_starttransfer}\n
# ----------\n
# time_total: %{time_total}\n
8. 最佳实践和安全
8.1 网络安全最佳实践
# 1. 使用 HTTPS
openstack endpoint create --region RegionOne \
compute public https://controller:8774/v2.1
# 2. 内外网分离
# Public: 外部用户访问
openstack endpoint create --region RegionOne \
compute public https://public.example.com:8774/v2.1
# Internal: 服务间通信
openstack endpoint create --region RegionOne \
compute internal http://internal.example.com:8774/v2.1
# Admin: 管理员专用
openstack endpoint create --region RegionOne \
compute admin https://admin.example.com:8774/v2.1
8.2 负载均衡和高可用
# Nginx 负载均衡配置
upstream nova_api {
server 192.168.1.11:8774 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8774 weight=1 max_fails=3 fail_timeout=30s;
server 192.168.1.13:8774 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 8774;
location / {
proxy_pass http://nova_api;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
8.3 监控和告警
# 检查 endpoint 健康状态的脚本
#!/bin/bash
ENDPOINTS=$(openstack endpoint list -f value -c URL)
for endpoint in $ENDPOINTS; do
if curl -f -s "$endpoint" > /dev/null; then
echo "✓ $endpoint - OK"
else
echo "✗ $endpoint - FAIL"
# 发送告警
# send_alert "$endpoint is down"
fi
done
9. 实际部署示例
9.1 完整的生产环境 Endpoint 配置
#!/bin/bash
# 生产环境 endpoint 配置脚本
# 网络配置
PUBLIC_IP="203.0.113.10"
INTERNAL_IP="10.0.0.10"
ADMIN_IP="10.0.1.10"
# SSL 配置
PUBLIC_PROTOCOL="https"
INTERNAL_PROTOCOL="http"
ADMIN_PROTOCOL="https"
# 服务端口配置
declare -A PORTS=(
["identity"]="5000"
["compute"]="8774"
["image"]="9292"
["network"]="9696"
["volume"]="8776"
["volumev2"]="8776"
["volumev3"]="8776"
["object-store"]="8080"
)
# 创建 endpoint 函数
create_endpoints() {
local service=$1
local port=${PORTS[$service]}
local version=$2
# Public endpoint
openstack endpoint create --region RegionOne \
$service public \
"${PUBLIC_PROTOCOL}://${PUBLIC_IP}:${port}${version}"
# Internal endpoint
openstack endpoint create --region RegionOne \
$service internal \
"${INTERNAL_PROTOCOL}://${INTERNAL_IP}:${port}${version}"
# Admin endpoint
openstack endpoint create --region RegionOne \
$service admin \
"${ADMIN_PROTOCOL}://${ADMIN_IP}:${port}${version}"
}
# 创建所有服务的 endpoints
create_endpoints "identity" "/v3"
create_endpoints "compute" "/v2.1"
create_endpoints "image" ""
create_endpoints "network" ""
create_endpoints "volume" "/v1/\$(project_id)s"
create_endpoints "volumev2" "/v2/\$(project_id)s"
create_endpoints "volumev3" "/v3/\$(project_id)s"
create_endpoints "object-store" "/v1/AUTH_\$(project_id)s"
echo "Endpoint configuration completed!"
9.2 多区域部署配置
#!/bin/bash
# 多区域 endpoint 配置
# 区域配置
REGIONS=("RegionOne" "RegionTwo" "RegionThree")
declare -A REGION_CONTROLLERS=(
["RegionOne"]="controller1.region1.example.com"
["RegionTwo"]="controller1.region2.example.com"
["RegionThree"]="controller1.region3.example.com"
)
# 为每个区域创建 endpoints
for region in "${REGIONS[@]}"; do
controller=${REGION_CONTROLLERS[$region]}
echo "Configuring endpoints for $region..."
# Keystone (仅在主区域)
if [ "$region" = "RegionOne" ]; then
openstack endpoint create --region $region \
identity public https://$controller:5000/v3
openstack endpoint create --region $region \
identity internal http://$controller:5000/v3
openstack endpoint create --region $region \
identity admin https://$controller:5000/v3
fi
# 计算服务
openstack endpoint create --region $region \
compute public https://$controller:8774/v2.1
openstack endpoint create --region $region \
compute internal http://$controller:8774/v2.1
openstack endpoint create --region $region \
compute admin https://$controller:8774/v2.1
# 镜像服务
openstack endpoint create --region $region \
image public https://$controller:9292
openstack endpoint create --region $region \
image internal http://$controller:9292
openstack endpoint create --region $region \
image admin https://$controller:9292
done
10. 总结
10.1 Endpoint 的关键作用
- 服务发现: 是 OpenStack 服务架构的基础
- 网络架构: 支持复杂的网络拓扑和安全策略
- 高可用性: 支持负载均衡和故障转移
- 多区域: 实现跨地域的云服务
10.2 配置要点
- 合理规划网络: 区分 public、internal、admin 接口
- 使用负载均衡: 提高服务可用性
- 启用 HTTPS: 保证通信安全
- 监控健康状态: 及时发现和解决问题
10.3 常见陷阱
- URL 格式错误: 注意版本号和路径格式
- 网络不通: 确保防火墙和路由配置正确
- 证书问题: HTTPS 配置时的证书验证
- 区域配置: 多区域环境中的 endpoint 管理
Endpoint 是 OpenStack 架构中的重要组件,正确理解和配置 endpoint 对于 OpenStack 云平台的稳定运行至关重要。通过合理的规划和配置,可以构建出高可用、安全、高性能的 OpenStack 云服务。
Similar code found with 2 license types