В проектах облачных шаблонов и развертываниях можно использовать ресурсы сети, безопасности и подсистемы балансировки нагрузки.

Общие данные о параметрах кода проекта облачного шаблона см. в разделе Схема типов ресурсов vRealize Automation.

Здесь приведены примеры ресурсов сетей, безопасности и подсистем балансировки нагрузки в стандартных проектах облачных шаблонов.

Сети

Сценарий ресурсов Пример кода проекта облачного шаблона
Компьютер vSphere с несколькими сетевыми адаптерами, подключенными к сетям vSphere и NSX, с назначением IP-адреса DHCP

resources:
  demo-machine:
    type: Cloud.vSphere.Machine
    properties:
      image: ubuntu
      flavor: small
      networks:
        - network: ${resource["demo-vSphere-Network"].id}
          deviceIndex: 0
        - network: ${resource["demo-NSX-Network"].id}
          deviceIndex: 1
  demo-vSphere-Network:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
  demo-NSX-Network:
    type: Cloud.NSX.Network
    properties:
      networkType: outbound
     
Частная сеть NSX, использующая свойство vlanIds, чтобы указать массив из трех сетей VLAN — 123, 456 и 7
formatVersion: 1
inputs: {}
resources:
  Cloud_Machine_1:
    type: Cloud.Machine
    properties:
      image: test
      flavor: test
      networks:
       - network: '${resource.Cloud_NSX_Network_1.id}'  
  Cloud_NSX_Network_1:
    type: Cloud.NSX.Network
    properties:
      networkType: private
      vlanIds:
         - 123 
         - 456
         - 7
     
Добавление частной сети со статическим IP-адресом для развертывания ВМ Azure
formatVersion: 1
inputs: {}
resources:
  Cloud_Azure_Machine_1:
    type: Cloud.Machine
    properties:
      image: photon
      flavor: Standard_B1ls
      networks:
        - network: '${resource.Cloud_Network_1.id}'
          assignment: static
          address: 10.0.0.45
          assignPublicIpAddress: false
  Cloud_Network_1:
    type: Cloud.Network
    properties:
      networkType: existing

Назначение статического IP-адреса можно использовать с vRealize IPAM (внутренним продуктом, поставляемым с vRealize Automation, или внешним продуктом на основе комплекта SDK IPAM в vRA, например для одного из подключаемых модулей Infoblox, доступных в VMware Marketplace). Другие варианты использования assignment: static не поддерживаются, как описано в разделе Ограничения в Дополнительные сведения о сетевых ресурсах в облачных шаблонах vRealize Automation.

resources:
  demo_vm:
    type: Cloud.vSphere.Machine
    properties:
      image: 'photon'
      cpuCount: 1
      totalMemoryMB: 1024
      networks:
        - network: ${resource.demo_nw.id}
          assignment: static
  demo_nw:
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
Добавьте или измените правила переадресации портов NAT и DNAT в ресурсе Cloud.NSX.NAT для существующего развертывания.
resources:
  gw:
    type: Cloud.NSX.Gateway
    properties:
      networks:
        - ${resource.akout.id}
  nat:
    type: Cloud.NSX.Nat
    properties:
      networks:
        - ${resource.akout.id}
      natRules:
        - translatedInstance: ${resource.centos.networks[0].id}
          index: 0
          protocol: TCP
          kind: NAT44
          type: DNAT
          sourceIPs: any
          sourcePorts: 80
          translatedPorts: 8080
          destinationPorts: 8080
          description: edit
        - translatedInstance: ${resource.centos.networks[0].id}
          index: 1
          protocol: TCP
          kind: NAT44
          type: DNAT
          sourceIPs: any
          sourcePorts: 90
          translatedPorts: 9090
          destinationPorts: 9090
          description: add
      gateway: ${resource.gw.id}
  centos:
    type: Cloud.vSphere.Machine
    properties:
      image: WebTinyCentOS65x86
      flavor: small
      customizationSpec: Linux
      networks:
        - network: ${resource.akout.id}
          assignment: static
  akout:
    type: Cloud.NSX.Network
    properties:
      networkType: outbound
      constraints:
        - tag: nsxt-nat-1-M2
        

Компьютер в общедоступном облаке для использования внутреннего IP-адреса вместо общедоступного IP-адреса. В этом примере используется конкретный идентификатор сети.

Примечание. Вариант network: используется в параметре networks:, чтобы указать идентификатор целевой сети. Вариант name: в параметре networks: устарел и не должен использоваться.

resources:
  wf_proxy:
    type: Cloud.Machine
    properties:
      image: ubuntu 16.04
      flavor: small
      constraints:
        - tag: 'platform:vsphere'
      networks:
        - network: '${resource.wf_net.id}'
          assignPublicIpAddress: false

Маршрутизируемая сеть для NSX-V или NSX-T с использованием типа сетевого ресурса NSX.

Cloud_NSX_Network_1:
    type: Cloud.NSX.Network
    properties:
      networkType: routed
Добавьте тег к ресурсу сетевого адаптера компьютера в облачном шаблоне.
formatVersion: 1
inputs: {}
resources:
 Cloud_Machine_1:
 type: Cloud.vSphere.Machine
 properties:
  flavor: small
  image: ubuntu
  networks:
     - name: '${resource.Cloud_Network_1.name}'
     deviceIndex: 0
     tags: 
      - key: 'nic0'
        value: null
      - key: internal
        value: true
     - name: '${resource.Cloud_Network_2.name}'
     deviceIndex: 1
     tags: 
      - key: 'nic1'
        value: null
      - key: internal
        value: false

Отметьте тегом логические коммутаторы NSX-T для исходящей сети.

Теги поддерживаются для NSX-T и VMware Cloud on AWS.

Дополнительные сведения об этом сценарии см. в статье блога сообщества Создание тегов в NSX с помощью Cloud Assembly.

Cloud_NSX_Network_1:
    type: Cloud.NSX.Network
    properties:
      networkType: outbound
      tags: 
        - key: app
          value: opencart

Группы безопасности

Сценарий ресурсов Пример кода проекта облачного шаблона

Существующая группа безопасности с тегом ограничения, применяемым к сетевому адаптеру компьютера.

Чтобы использовать существующую группу безопасности, введите значение existing для свойства securityGroupType .

Для выделения существующих групп безопасности с помощью тегов ограничений ресурсу Cloud.SecurityGroup можно назначить теги. В проекте облачного шаблона нельзя использовать группы безопасности, которые не содержат теги.

Теги ограничений необходимо установить для ресурсов группы безопасности securityGroupType: existing. Эти ограничения должны совпадать с тегами, установленными для существующих групп безопасности. Теги ограничений нельзя устанавливать для ресурсов группы безопасности securityGroupType: new.

formatVersion: 1
inputs: {}
resources:
  allowSsh_sg:
    type: Cloud.SecurityGroup
    properties:
      securityGroupType: existing
      constraints:
        - tag: allowSsh
  compute:
    type: Cloud.Machine
    properties:
      image: centos
      flavor: small
      networks:
        - network: '${resource.prod-net.id}'
          securityGroups:
            - '${resource.allowSsh_sg.id}'
  prod-net:
    type: Cloud.Network
    properties:
      networkType: existing

Группа безопасности по требованию с двумя правилами брандмауэра, показывающими варианты доступа Allow и Deny.

resources:
  Cloud_SecurityGroup_1:
    type: Cloud.SecurityGroup
    properties:
      securityGroupType: new
      rules:
        - ports: 5000
          source: 'fc00:10:000:000:000:56ff:fe89:48b4'
          access: Allow
          direction: inbound
          name: allow_5000
          protocol: TCP
        - ports: 7000
          source: 'fc00:10:000:000:000:56ff:fe89:48b4'
          access: Deny
          direction: inbound
          name: deny_7000
          protocol: TCP
  Cloud_vSphere_Machine_1:
    type: Cloud.vSphere.Machine
    properties:
      image: photon
      cpuCount: 1
      totalMemoryMB: 256
      networks:
        - network: '${resource.Cloud_Network_1.id}'
          assignIPv6Address: true
          assignment: static
          securityGroups:
            - '${resource.Cloud_SecurityGroup_1.id}'
  Cloud_Network_1:
    type: Cloud.Network
    properties:
      networkType: existing
Сложный облачный шаблон с двумя группами безопасности, содержащий следующие элементы:
  • 1 существующая группа безопасности
  • 1 группа безопасности по требованию с примерами нескольких правил брандмауэра
  • 1 компьютер vSphere
  • 1 существующая сеть

Этот пример показывает различные комбинации протоколов и портов, служб, значений IP CIDR для источника и назначения, диапазон IP-адресов в качестве источника или назначения, а также параметры для any, IPv6 и (::/0).

Для сетевых адаптеров компьютеров можно указать подключенную сеть и группы безопасности. Кроме того, можно указать индекс или IP-адрес сетевого адаптера.

formatVersion: 1
inputs: {}
resources:
  DEMO_ESG : existing security group - security group 1)
    type: Cloud.SecurityGroup
    properties:
      constraints:
        - tag: BlockAll
      securityGroupType: existing (designation of existing for security group 1) 
  DEMO_ODSG: (on-demand security group - security group 2))
    type: Cloud.SecurityGroup
    properties:
      rules: (multiple firewall rules in this section)
        - name: IN-ANY (rule 1)
          source: any
          service: any
          direction: inbound
          access: Deny
        - name: IN-SSH (rule 2)
          source: any
          service: SSH
          direction: inbound
          access: Allow
        - name: IN-SSH-IP (rule 3)
          source: 33.33.33.1-33.33.33.250
          protocol: TCP
          ports: 223
          direction: inbound
          access: Allow
        - name: IPv-6-ANY-SOURCE (rule 4)
          source: '::/0'
          protocol: TCP
          ports: 223
          direction: inbound
          access: Allow
        - name: IN-SSH-IP (rule 5)
          source: 44.44.44.1/24
          protocol: UDP
          ports: 22-25
          direction: inbound
          access: Allow
        - name: IN-EXISTING-SG (rule 6)
          source: '${resource["DEMO_ESG"].id}'
          protocol: ICMPv6
          direction: inbound
          access: Allow
        - name: OUT-ANY (rule 7)
          destination: any
          service: any
          direction: outbound
          access: Deny
        - name: OUT-TCP-IPv6 (rule 8)
          destination: '2001:0db8:85a3::8a2e:0370:7334/64'
          protocol: TCP
          ports: 22
          direction: outbound
          access: Allow
        - name: IPv6-ANY-DESTINATION (rule 9)
          destination: '::/0'
          protocol: UDP
          ports: 23
          direction: outbound
          access: Allow
        - name: OUT-UDP-SERVICE (rule 10)
          destination: any
          service: NTP
          direction: outbound
          access: Allow
      securityGroupType: new (designation of on-demand for security group 2)
  DEMO_VC_MACHINE: (machine resource)
    type: Cloud.vSphere.Machine 
    properties:
      image: PHOTON
      cpuCount: 1
      totalMemoryMB: 1024
      networks: (Machine network NICs)
        - network: '${resource.DEMO_NW.id}'
          securityGroups:
            - '${resource.DEMO_ODSG.id}'
            - '${resource.DEMO_ESG.id}'
  DEMO_NETWORK: (network resource)
    type: Cloud.vSphere.Network
    properties:
      networkType: existing
      constraints:
        - tag: nsx62

Подсистемы балансировки нагрузки

Сценарий ресурсов Пример кода проекта облачного шаблона

Укажите уровень и алгоритм ведения журнала балансировки нагрузки, а также его размер.

Пример подсистемы балансировки нагрузки NSX, где показано использование уровня ведения журнала, алгоритма и размера:

resources:
  Cloud_LoadBalancer_1:
    type: Cloud.NSX.LoadBalancer
    properties:
      name: myapp-lb
      network: '${appnet-public.name}'
      instances: '${wordpress.id}'
      routes:
       - protocol: HTTP port: '80'
         loggingLevel: CRITICAL 
         algorithm: LEAST_CONNECTION
         type: MEDIUM

Свяжите подсистему балансировки нагрузки с именованным компьютером или его сетевым адаптером. Чтобы добавить компьютер в пул подсистемы балансировки нагрузки, можно указать либо machine ID, либо machine network ID. Свойство instances поддерживает как компьютеры (machine by ID), так и сетевые адаптеры (machine by network ID).

В первом примере в развертывании используется параметр machine by ID для балансировки нагрузки компьютера, когда он развернут в любой сети.

Во втором примере в развертывании используется параметр machine by network ID для балансировки нагрузки компьютера только в том случае, когда компьютер развернут в сетевом адаптере именованного компьютера.

В третьем примере показаны оба параметра, используемые в одном и том же варианте instances.

Для определения идентификатора компьютера или идентификатора сети компьютеров можно использовать свойство instances.
  • Идентификатор компьютера
    Cloud_LoadBalancer_1:
     type: Cloud.LoadBalancer
     properties:
       network: '${resource.Cloud_Network_1.id}'
       instances: '${resource.Cloud_Machine_1.id}'
       
  • Идентификатор сети компьютеров
    Cloud_LoadBalancer_1:
     type: Cloud.LoadBalancer
     properties:
       network: '${resource.Cloud_Network_1.id}'
       instances: '${resource.Cloud_Machine_1.networks[0].id}'
  • Один компьютер, указанный для включения подсистемы балансировки нагрузки, и сетевой адаптер другого компьютера, указанный для включения подсистемы балансировки нагрузки:
    instances:
      - resource.Cloud_Machine_1.id
      - resource.Cloud_Machine_2.networks[2].id
Добавьте параметры проверки работоспособности в подсистему балансировки нагрузки NSX. К дополнительным вариантам относятся httpMethod, requestBody и responseBody.
myapp-lb:
  type: Cloud.NSX.LoadBalancer
  properties:
    name: myapp-lb
    network: '${appnet-public.name}'
    instances: '${wordpress.id}'
    routes:
     - protocol: HTTP
       port: '80'
       algorithm: ROUND_ROBIN
       instanceProtocol: HTTP
       instancePort: '80'
       healthCheckConfiguration:
         protocol: HTTP
         port: '80'
         urlPath: /mywordpresssite/wp-admin/install.php
         intervalSeconds: 60
         timeoutSeconds: 10
         unhealthyThreshold: 10
         healthyThreshold: 2
       connectionLimit: '50'
       connectionRateLimit: '50'
       maxConnections: '500'
       minConnections: ''
     internetFacing: true{code}

Сеть по требованию с подсистемой балансировки нагрузки с одним плечом.

inputs: {}
resources:
  mp-existing:
    type: Cloud.Network
    properties:
      name: mp-existing
      networkType: existing
  mp-wordpress:
    type: Cloud.vSphere.Machine
    properties:
      name: wordpress
      count: 2
      flavor: small
      image: tiny
      customizationSpec: Linux
      networks:
        - network: '${resource["mp-private"].id}'
  mp-private:
    type: Cloud.NSX.Network
    properties:
      name: mp-private
      networkType: private
      constraints:
        - tag: nsxt
  mp-wordpress-lb:
    type: Cloud.LoadBalancer
    properties:
      name: wordpress-lb
      internetFacing: false
      network: '${resource.mp-existing.id}'
      instances: '${resource["mp-wordpress"].id}'
      routes:
        - protocol: HTTP
          port: '80'
          instanceProtocol: HTTP
          instancePort: '80'
          healthCheckConfiguration:
            protocol: HTTP
            port: '80'
            urlPath: /index.pl
            intervalSeconds: 60
            timeoutSeconds: 30
            unhealthyThreshold: 5
            healthyThreshold: 2

Существующая сеть с подсистемой балансировки нагрузки.

formatVersion: 1
inputs:
  count:
    type: integer
    default: 1
resources:
  ubuntu-vm:
    type: Cloud.Machine
    properties:
      name: ubuntu
      flavor: small
      image: tiny
      count: '${input.count}'
      networks:
        - network: '${resource.Cloud_NSX_Network_1.id}'
  Provider_LoadBalancer_1:
    type: Cloud.LoadBalancer
    properties:
      name: OC-LB
      routes:
        - protocol: HTTP
          port: '80'
          instanceProtocol: HTTP
          instancePort: '80'
          healthCheckConfiguration:
            protocol: HTTP
            port: '80'
            urlPath: /index.html
            intervalSeconds: 60
            timeoutSeconds: 5
            unhealthyThreshold: 5
            healthyThreshold: 2
      network: '${resource.Cloud_NSX_Network_1.id}'
      internetFacing: false
      instances: '${resource["ubuntu-vm"].id}'
  Cloud_NSX_Network_1:
    type: Cloud.NSX.Network
    properties:
      networkType: existing
      constraints:
        - tag: nsxt24prod

Подробнее

Сценарии реализации сетей и групп безопасности см. в следующих публикациях в блогах VMware.