使用 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)

完整示例:网络资源删除