使用 OpenStack 网络¶
在使用网络服务之前,您需要通过遵循 连接 用户指南来创建与您的 OpenStack 云的连接。这将为您提供在以下示例中使用的 conn 变量。
网络服务的主要资源是网络。
列出网络¶
一个 网络 是一个隔离的 第二层 网络段。有两种类型的网络:项目网络和提供者网络。项目网络完全隔离,不与其他项目共享。提供者网络映射到数据中心中现有的物理网络,并为服务器提供外部网络访问。只有 OpenStack 管理员才能创建提供者网络。网络可以通过路由器连接。
def list_networks(conn):
print("List Networks:")
for network in conn.network.networks():
print(network)
完整示例:网络资源列表
列出子网¶
一个 子网 是一个 IP 地址块和相关的配置状态。当在网络上创建新端口时,子网用于分配 IP 地址。
def list_subnets(conn):
print("List Subnets:")
for subnet in conn.network.subnets():
print(subnet)
完整示例:网络资源列表
列出端口¶
一个 端口 是一个连接点,用于将单个设备(例如服务器的 网卡)连接到网络。该端口还描述了相关的网络配置,例如在该端口上要使用的 MAC 和 IP 地址。
def list_ports(conn):
print("List Ports:")
for port in conn.network.ports():
print(port)
完整示例:网络资源列表
列出安全组¶
一个 安全组 充当服务器的虚拟防火墙。它是一个安全组规则的容器,这些规则指定允许通过端口传递的网络流量类型和方向。
def list_security_groups(conn):
print("List Security Groups:")
for port in conn.network.security_groups():
print(port)
完整示例:网络资源列表
列出路由器¶
一个 路由器 是一个在网络之间转发数据包的逻辑组件。它还提供 第三层 和 NAT 转发,为项目网络上的服务器提供外部网络访问。
def list_routers(conn):
print("List Routers:")
for router in conn.network.routers():
print(router)
完整示例:网络资源列表
列出网络代理¶
一个 网络代理 是一个插件,用于处理各种任务,这些任务用于实现虚拟网络。这些代理包括 neutron-dhcp-agent、neutron-l3-agent、neutron-metering-agent 和 neutron-lbaas-agent 等。
def list_network_agents(conn):
print("List Network Agents:")
for agent in conn.network.agents():
print(agent)
完整示例:网络资源列表
创建网络¶
创建一个项目网络和子网。在创建服务器时可以使用此网络,并允许服务器与同一项目网络上的其他服务器进行通信。
def create_network(conn):
print("Create Network:")
example_network = conn.network.create_network(
name='openstacksdk-example-project-network'
)
print(example_network)
example_subnet = conn.network.create_subnet(
name='openstacksdk-example-project-subnet',
network_id=example_network.id,
ip_version='4',
cidr='10.0.2.0/24',
gateway_ip='10.0.2.1',
)
print(example_subnet)
完整示例:网络资源创建
打开端口¶
在为网络创建安全组时,您需要打开某些端口以允许通过它们进行通信。例如,您可能需要在端口 443 上启用 HTTPS 访问。
def open_port(conn):
print("Open a port:")
example_sec_group = conn.network.create_security_group(
name='openstacksdk-example-security-group'
)
print(example_sec_group)
example_rule = conn.network.create_security_group_rule(
security_group_id=example_sec_group.id,
direction='ingress',
remote_ip_prefix='0.0.0.0/0',
protocol='tcp',
port_range_max='443',
port_range_min='443',
ethertype='IPv4',
)
print(example_rule)
完整示例:网络安全组创建
接受 Ping¶
为了 ping 网络中的机器在安全组内,您需要创建一个规则来允许传入的 ICMP 数据包。
def allow_ping(conn):
print("Allow pings:")
example_sec_group = conn.network.create_security_group(
name='openstacksdk-example-security-group2'
)
print(example_sec_group)
example_rule = conn.network.create_security_group_rule(
security_group_id=example_sec_group.id,
direction='ingress',
remote_ip_prefix='0.0.0.0/0',
protocol='icmp',
port_range_max=None,
port_range_min=None,
ethertype='IPv4',
)
print(example_rule)
完整示例:网络安全组创建
删除网络¶
删除项目网络及其子网。
def delete_network(conn):
print("Delete Network:")
example_network = conn.network.find_network(
'openstacksdk-example-project-network'
)
for example_subnet in example_network.subnet_ids:
conn.network.delete_subnet(example_subnet, ignore_missing=False)
conn.network.delete_network(example_network, ignore_missing=False)
完整示例:网络资源删除