Application Delivery Management

StyleBook, um eine grundlegende Lastausgleichskonfiguration zu erstellen

Im vorherigen Beispiel haben Sie ein grundlegendes StyleBook erstellt, um einen virtuellen Lastausgleichsserver zu erstellen. Sie können dieses StyleBook unter einem anderen Namen speichern und es dann aktualisieren, um zusätzliche Parameter und Komponenten für eine grundlegende Lastausgleichskonfiguration aufzunehmen. Speichern Sie diese StyleBook-Datei als basic-lb-config.yaml.

In diesem Abschnitt entwerfen Sie ein neues StyleBook, das eine Lastausgleichskonfiguration erstellt, die aus dem virtuellen Lastausgleichsserver, einer Servicegruppe und einer Liste von Diensten besteht. Außerdem werden die Dienste an die Dienstgruppe gebunden und die Dienstgruppe an den virtuellen Server gebunden.

Überschrift

Um dieses StyleBook zu erstellen, müssen Sie mit der Aktualisierung des Kopfzeilenabschnitts beginnen. Dieser Abschnitt ähnelt dem, den Sie für den Lastenausgleich des virtuellen Servers StyleBook erstellt haben. Ändern Sie im Headerbereich den Wert von name in basic-lb-config. Aktualisieren Sie außerdem die Beschreibung und den Anzeigenamen, um dieses StyleBook entsprechend zu beschreiben. Sie müssen die Namespace- und Versionswerte nicht ändern. Da Sie den Namen geändert haben, erstellt die Kombination aus Name, Namespace und Version einen eindeutigen Bezeichner für dieses StyleBook im System.

name: basic-lb-config
description: This StyleBook defines a simple load balancing configuration.
display-name: Load Balancing Configuration
namespace: com.example.stylebooks
schema-version: "1.0"
version: "0.1"
<!--NeedCopy-->

Importieren von StyleBooks

Der Abschnitt Import-StyleBooks bleibt unverändert. Es bezieht sich auf den netscaler.nitro.config-Namespace, um die Nitro-Konfigurationsobjekte zu verwenden.

import-stylebooks:
 -
 namespace: netscaler.nitro.config
 prefix: ns
 version: "10.5"
<!--NeedCopy-->

Parameter

Sie müssen den Parameterbereich aktualisieren, um zwei zusätzliche Parameter hinzuzufügen, um die Liste der Dienste oder Server und den Port zu definieren, auf dem die Dienste hören. Die ersten drei Parameter, name, ip und lb-alg bleiben gleich.

parameters:
 -
 name: name
 type: string
 label: Application Name
 description: Name of the application configuration
 required: true
  -
   name: ip
   type: ipaddress
   label: Application Virtual IP (VIP)
   description: Application VIP that the clients access
   required: true
  -
   name: lb-alg
   type: string
   label: LoadBalancing Algorithm
   description: Choose the load balancing algorithm used for load balancing client requests between the application servers.
     allowed-values:
     - ROUNDROBIN
     - LEASTCONNECTION
      default: ROUNDROBIN
  -
   name: svc-servers
   type: ipaddress[]
   label: Application Server IPs
   description: The IP addresses of all the servers of this application
   required: true
  -
   name: svc-port
   type: tcp-port
   label: Server Port
   description: The TCP port open on the application servers to receive requests.
   default: 80
<!--NeedCopy-->

In diesem Beispiel wird der Parameter svc-Server hinzugefügt, um eine Liste von IP-Adressen der Dienste zu akzeptieren, die die Backend-Server der Anwendung darstellen. Dies ist ein obligatorischer Parameter, wie angegeben durch required: true. Der zweite Parameter, svc-port, gibt die Portnummer an, auf die die Server lauschen. Die Standardportnummer ist 80 für svc-port Parameter, wenn sie nicht vom Benutzer angegeben wird.

Komponenten

Sie müssen auch den Komponentenabschnitt aktualisieren, um zusätzliche Komponenten so zu definieren, dass sie die beiden neuen Parameter verwenden und die komplette Lastausgleichskonfiguration erstellen.

Für dieses Beispiel müssen Sie den Komponentenabschnitt wie folgt schreiben:

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg

components:
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
   name: $parameters.name + "-svcgrp"
   servicetype: HTTP
  
components:
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $parent.parent.properties.name
   servicegroupname: $parent.properties.name
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: str($parameters.svc-port)
   servicegroupname: $parent.properties.name
<!--NeedCopy-->

In diesem Beispiel enthält die ursprüngliche Komponente lbvserver-comp (aus dem vorherigen Beispiel) jetzt eine untergeordnete Komponente namens svcg-comp. Und die svcg-comp-Komponente enthält zwei untergeordnete Komponenten. Durch das Verschachteln einer Komponente in einer anderen Komponente kann die verschachtelte Komponente Konfigurationsobjekte erstellen, indem sie auf Attribute in der übergeordneten Komponente verweist. Die verschachtelte Komponente kann für jedes Objekt, das in der übergeordneten Komponente erstellt wurde, ein oder mehrere Objekte erstellen.

Die svcg-comp-Komponente wird verwendet, um eine Dienstgruppe auf der Citrix ADC-Instanz zu erstellen, indem die Werte verwendet werden, die für die Attribute der Ressource “Servicegroup” bereitgestellt werden. In diesem Beispiel geben Sie den statischen Wert für servicetype an, während name seinen Wert aus dem Eingabeparameter abruft. Sie verweisen auf den Parameternamen, der im **Parameterabschnitt definiert ist, indem Sie die**Notation $parameters.name + “ -svcgrp” verwenden, wobei -svcgrp an den benutzerdefinierten Namen angehängt (verkettet) wird.

Die Komponente svcg-comp hat zwei untergeordnete Komponenten, lbvserver-svg-binding-comp und members-svcg-comp.

Die erste untergeordnete Komponente, lbvserver-svg-binding-comp, wird verwendet, um ein Konfigurationsobjekt zwischen der Dienstgruppe, die von der übergeordneten Komponente erstellt wurde, und dem virtuellen Lastausgleichsserver (lbvserver) zu binden, der von der übergeordneten Komponente des übergeordneten Elements erstellt wurde. Die $parent Notation, auch übergeordnete Referenz genannt, wird verwendet, um auf Entitäten in den übergeordneten Komponenten zu verweisen. Beispielsweise bezieht sich servicegroupname: $parent.properties.name auf die Dienstgruppe, die von der übergeordneten Komponente svcg-comperstellt wurde, und name: $parent.parent.properties.name bezieht sich auf den virtuellen Server, der von der übergeordneten Komponente des übergeordneten Elements erstellt wurde. lbvserver-comp.

Die members-svcg-Komponente wird verwendet, um Konfigurationsobjekte zwischen der Liste der Dienste an die von der übergeordneten Komponente erstellte Dienstgruppe zu binden. Die Erstellung mehrerer Bindungskonfigurationsobjekte wird erreicht, indem das repeat-Konstrukt von StyleBook verwendet wird, um über die Liste der Server zu iterieren, die im Parameter svc-Server angegeben ist. Während der Iteration erstellt diese StyleBook-Komponente ein Nitro-Konfigurationsobjekt vom Typ servicegroup_servicegroupmember_binding für jeden Dienst (im repeat-item Konstrukt als srv bezeichnet) in der Dienstgruppe und legt das ip-Attribut in jedem Nitro Konfigurationsobjekt an die IP-Adresse des entsprechenden Servers.

Im Allgemeinen können Sie die Konstrukte für **Wiederholungs- und Wiederholungselemente** in einer Komponente verwenden, damit diese Komponente mehrere Konfigurationsobjekte desselben Typs erstellt. Sie können dem Repeat-Item-Konstrukt einen Variablennamen zuweisen, z. B. srv, um den aktuellen Wert in der Iteration festzulegen. Dieser Variablenname wird in den Eigenschaften derselben Komponente oder in untergeordneten Komponenten als $bezeichnet <varname>, zum Beispiel $srv.

Im obigen Beispiel haben Sie Verschachtelung von Komponenten ineinander verwendet, um diese Konfiguration einfach zu konstruieren. In diesem speziellen Fall war die Verschachtelung von Komponenten nicht die einzige Möglichkeit, die Konfiguration zu erstellen. Sie hätten das gleiche Ergebnis ohne Verschachtelung erzielen können, wie unten gezeigt:

components:
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: str($parameters.svc-port)
   servicegroupname: $components.svcg-comp.properties.name
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.name
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
  name: $parameters.name + "-svcgrp"
  servicetype: HTTP  
<!--NeedCopy-->

Hier befinden sich alle Komponenten auf der gleichen Ebene (d. h. sie sind nicht verschachtelt), aber das erzielte Ergebnis (die generierte Citrix ADC Konfiguration) ist mit dem der zuvor verwendeten verschachtelten Komponenten identisch. Auch die Reihenfolge, in der die Komponenten im StyleBook deklariert werden, wirkt sich nicht auf die Reihenfolge der Erstellung der Konfigurationsobjekte aus. In diesem Beispiel müssen die Komponenten svcg-comp und lbvserver-comp, obwohl sie zuletzt deklariert wurden, erstellt werden, bevor die zweite Komponente lbvserver-svg-binding-comperstellt wird, da in der zweiten Komponente Vorwärtsverweise auf diese Komponenten vorhanden sind.

Hinweis

Nach der Konvention sind die Namen von StyleBooks, Parametern, Substitutionen, Komponenten und Ausgaben in Kleinbuchstaben. Wenn sie mehrere Wörter enthalten, werden sie durch ein - -Zeichen getrennt. Zum Beispiel lb-bindings, app-name, rewrite-config usw. Eine andere Konvention besteht darin, Komponentennamen mit der Zeichenfolge -comp zu versehen.

Ausgaben

Der letzte Abschnitt, den Sie dem neuen StyleBook hinzufügen können, ist der Ausgabebereich, in dem Sie angeben, was dieses StyleBook seinen Benutzern (oder in anderen StyleBooks) zur Verfügung stellt, nachdem es zum Erstellen einer Konfiguration verwendet wird. Beispielsweise können Sie im Abschnitt Ausgaben angeben, dass die Konfigurationsobjekte lbvserver und die ServiceGroup-Konfigurationsobjekte verfügbar gemacht werden, die von diesem StyleBook erstellt würden.

outputs:
 -
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: The component that builds the Nitro lbvserver configuration object
 -
  name: servicegroup-comp
  value: $components.svcg-comp
  description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->

Der Ausgabebereich eines StyleBook ist optional. Ein StyleBook muss keine Ausgaben zurückgeben. Durch die Rückgabe einiger interner Komponenten als Ausgaben ermöglicht es jedoch allen StyleBooks, die dieses StyleBook importieren, mehr Flexibilität, wie Sie beim Erstellen eines zusammengesetzten StyleBook sehen können.

Hinweis

Es empfiehlt sich, eine ganze Komponente des StyleBook im Ausgaben-Abschnitt verfügbar zu machen, anstatt nur eine einzelne Eigenschaft einer Komponente (z. B. die gesamte $components.lbvserver-comp und nicht nur den Namen $components.lbvserver-comp.properties.name). Fügen Sie der Ausgabe auch eine Beschreibung hinzu, die erklärt, was die spezifische Ausgabe darstellt.

Erstellen Sie Ihr StyleBook

Nachdem Sie nun alle erforderlichen Abschnitte dieses StyleBook definiert haben, bringen Sie sie alle zusammen, um Ihr zweites StyleBook zu erstellen. Sie haben diese StyleBook-Datei bereits als basic-lb-config.yamlgespeichert. Citrix empfiehlt, den YAML-Inhalt mithilfe des integrierten YAML-Validators auf der Seite StyleBooks zu überprüfen und zu importieren.

Der vollständige Inhalt der Datei basic-lb-config.yaml wird nachfolgend wiedergegeben:

name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: Load Balancing Configuration
description: This StyleBook defines a simple load balancing configuration.
schema-version: "1.0"

import-stylebooks:
 -
  namespace: netscaler.nitro.config
  version: "10.5"
  prefix: ns
parameters:
 -
  name: name
  type: string
  label: Application Name
  description: Give a name to the application configuration.
  required: true
 -
  name: ip
  type: ipaddress
  label: Application Virtual IP (VIP)
  description: The Application VIP that clients access
  required: true
 -
  name: lb-alg
  type: string
  label: LoadBalancing Algorithm
  description: Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.
  allowed-values:
     - ROUNDROBIN
     - LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress[]
  label: Application Server IPs
  description: The IP addresses of all the servers of this application
  required: true

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
    servicegroupname: $parameters.name + "-svcgrp"
    servicetype: HTTP
  
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.servicegroupname
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: 80
   servicegroupname: $components.svcg-comp.properties.servicegroupname
outputs:
-
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: The component that builds the Nitro lbvserver configuration object
-
  name: servicegroup-comp
  value: $components.svcg-comp
  description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->

Um mit dem StyleBook Konfigurationen zu erstellen, müssen Sie es in Citrix ADM importieren und es dann verwenden. Weitere Informationen finden Sie unter So verwenden Sie benutzerdefinierte StyleBooks.

Sie können dieses StyleBook auch in andere StyleBooks importieren und seine Eigenschaften wie im nächsten Abschnitt beschrieben verwenden.

StyleBook, um eine grundlegende Lastausgleichskonfiguration zu erstellen