在容器内获取元数据

ECI实例的元数据可以提供关于ECI实例及其容器的信息用于管理和使用容器,例如名称、ID等基本信息,以及IP地址、网卡等网络信息等。本文介绍如何在容器内获取元数据,将ECI实例信息和容器Meta数据呈现给运行中的容器。

方式一:通过MetaServer访问元数据

  1. 连接容器。具体操作,请参见连接ECI实例

  2. 访问元数据。

    说明

    如果容器环境没有安装curl,请先安装curl。

    curl http://100.100.100.200/latest/meta-data/<metadata>

    <metadata>请替换为具体要查询的实例元数据。例如执行以下命令获取实例ID。

    curl http://100.100.100.200/latest/meta-data/instance-id

    ECI实例目前能获取的基本实例元数据项如下表所示:

    实例元数据项

    说明

    /dns-conf/nameservers

    实例的DNS配置。

    /eipv4

    实例的弹性公网IP(IPv4类型)。

    /hostname

    实例的主机名,对应ContainerGroupName。

    /instance-id

    实例ID。

    /mac

    实例的MAC地址。

    /network/interfaces/

    网卡的MAC地址列表。

    /network/interfaces/macs/[mac]/network-interface-id

    网卡的标识ID,其中[mac]参数需要替换为实例MAC地址。

    /network/interfaces/macs/[mac]/netmask

    网卡对应的子网掩码。

    /network/interfaces/macs/[mac]/vswitch-cidr-block

    网卡所属的虚拟交换机IPv4 CIDR段。

    /network/interfaces/macs/[mac]/vpc-cidr-block

    网卡所属的VPC IPv4 CIDR段。

    /network/interfaces/macs/[mac]/private-ipv4s

    网卡分配的私网IPv4地址列表。

    /network/interfaces/macs/[mac]/vpc-ipv6-cidr-blocks

    网卡所属的VPC IPv6 CIDR段,仅支持已配置了IPv6的VPC类型实例。

    /network/interfaces/macs/[mac]/vswitch-id

    网卡所属安全组的虚拟交换机ID。

    /network/interfaces/macs/[mac]/vpc-id

    网卡所属安全组的VPC ID。

    /network/interfaces/macs/[mac]/primary-ip-address

    网卡主私有IP地址。

    /network/interfaces/macs/[mac]/gateway

    网卡对应的IPv4网关地址。

    /instance/max-netbw-egress

    实例规格的出方向内网最大带宽。单位:Kbit/s。

    /instance/max-netbw-ingerss

    实例规格的入方向内网最大带宽。单位:Kbit/s。

    /network/interfaces/macs/[mac]/ipv6s

    网卡分配的IPv6地址列表,仅支持已配置了IPv6的VPC类型实例。

    /network/interfaces/macs/[mac]/ipv6-gateway

    网卡所属的VPC的IPv6网关地址。

    /network/interfaces/macs/[mac]/vswitch-ipv6-cidr-block

    网卡所属的虚拟交换机IPv6 CIDR段,仅支持已配置了IPv6的VPC类型实例。

    /private-ipv4

    实例的私网IPv4地址。

    /ntp-conf/ntp-servers

    NTP服务器地址。

    /owner-account-id

    实例拥有者的阿里云账号ID。

    /region-id

    实例所属地域。

    /serial-number

    实例所对应的序列号。

    /vpc-id

    实例所属VPC ID。

    /vpc-cidr-block

    实例所属VPC的CIDR网段。

    /vswitch-cidr-block

    实例所属虚拟交换机的CIDR网段。

    /vswitch-id

    实例所属虚拟交换机ID。

    /zone-id

    实例所属可用区。

    /ram/security-credentials/[role-name]

    实例RAM角色策略所生成的STS临时凭证。只有在实例指定了RAM角色后,您才能获取STS临时凭证。其中[role-name]参数需要替换为实例RAM角色的名称。如果未指定[role-name],将返回实例RAM角色名称。

方式二:配置容器环境变量

通过配置ECI实例容器环境变量的Value便可获取实例相关信息,ECI实例目前可以获取到实例ID、实例名称、实例所属地域、实例所属可用区、实例容器名称等元数据项。

Key

Value

说明

eci_id

__ECI_ID__

实例ID。

eci_name

__ECI_NAME__

实例名称。

region_id

__REGION_ID__

实例所属地域。

zone_id

__ZONE_ID__

实例所属可用区。

container_name

__CONTAINER_NAME__

容器名称。

配置示例如下:

OpenAPI

调用CreateContainerGroup接口创建ECI实例时,可以通过Container.N.EnvironmentVar.N.Key和Container.N.EnvironmentVar.N.Value来设置环境变量。示例如下:

ContainerGroupName=test-env
Container.1.Image=registry-vpc.cn-shanghai.aliyuncs.com/eci_open/nginx:1.14.2
Container.1.Name=container-1
# 自定义环境变量
Container.1.EnvironmentVar.1.Key=eci_id
Container.1.EnvironmentVar.2.Key=eci_name
Container.1.EnvironmentVar.3.Key=region_id
Container.1.EnvironmentVar.4.Key=zone_id
Container.1.EnvironmentVar.5.Key=container_name
Container.1.EnvironmentVar.1.Value=__ECI_ID__
Container.1.EnvironmentVar.2.Value=__ECI_NAME__
Container.1.EnvironmentVar.3.Value=__REGION_ID__
Container.1.EnvironmentVar.4.Value=__ZONE_ID__
Container.1.EnvironmentVar.5.Value=__CONTAINER_NAME__

控制台

通过弹性容器实例控制台创建ECI实例时,您可以在容器配置区域选择容器,展开该容器的高级配置,然后打开环境变量开关,添加环境变量。示例如下:

元数据.png

创建ECI实例后,您可以连接容器查看是否生效。具体操作,请参见连接ECI实例view