<a id="installation-with-manifests"></a>

# Установка с помощью манифестов

## Предварительные требования

Необходим доступ к Docker-образу в нашем репозитории:

```none
anic.docker.angie.software/
```

Для текущей версии доступны следующие образы:

```none
anic.docker.angie.software/anic:0.7.4-alpine
anic.docker.angie.software/anic:0.7.4-alpine-debian
anic.docker.angie.software/anic:0.7.4-altlinux
```

За доступом обращайтесь на [info@wbsrv.ru](mailto:info@wbsrv.ru).

## Настройка RBAC

1. Создайте пространство имен и сервисный аккаунт для ANIC:
   ```yaml
   $ kubectl apply -f - <<EOF
   apiVersion: v1
   kind: Namespace
   metadata:
    name: angie-ingress
   ---
   apiVersion: v1
   kind: ServiceAccount
   metadata:
    name: angie-ingress
    namespace: angie-ingress
   EOF
   ```
2. Создайте `ClusterRole` и `ClusterRoleBinding`:

   ### Пример

   ```yaml
   $ kubectl apply -f - <<EOF
   kind: ClusterRole
   apiVersion: rbac.authorization.k8s.io/v1
   metadata:
     name: angie-ingress
   rules:
   - apiGroups:
     - discovery.k8s.io
     resources:
     - endpointslices
     verbs:
     - get
     - list
     - watch
   - apiGroups:
     - ""
     resources:
     - services
     verbs:
     - get
     - list
     - watch
   - apiGroups:
     - ""
     resources:
     - secrets
     verbs:
     - get
     - list
     - watch
   - apiGroups:
     - ""
     resources:
     - configmaps
     verbs:
     - get
     - list
     - watch
     - update
     - create
   - apiGroups:
     - ""
     resources:
     - pods
     verbs:
     - get
     - list
     - watch
     - update
   - apiGroups:
     - ""
     resources:
     - namespaces
     verbs:
     - get
     - list
     - watch
   - apiGroups:
     - ""
     resources:
     - events
     verbs:
     - create
     - patch
     - list
   - apiGroups:
     - coordination.k8s.io
     resources:
     - leases
     verbs:
     - get
     - list
     - watch
     - update
     - create
   - apiGroups:
     - networking.k8s.io
     resources:
     - ingresses
     verbs:
     - list
     - watch
     - get
   - apiGroups:
     - networking.k8s.io
     resources:
     - ingresses/status
     verbs:
     - update
   - apiGroups:
     - k8s.angie.software
     resources:
     - virtualservers
     - virtualserverroutes
     - globalconfigurations
     - transportservers
     - policies
     verbs:
     - list
     - watch
     - get
   - apiGroups:
     - k8s.angie.software
     resources:
     - virtualservers/status
     - virtualserverroutes/status
     - policies/status
     - transportservers/status
     - dnsendpoints/status
     verbs:
     - update
   - apiGroups:
     - networking.k8s.io
     resources:
     - ingressclasses
     verbs:
     - get
   - apiGroups:
       - cis.f5.com
     resources:
       - ingresslinks
     verbs:
       - list
       - watch
       - get
   - apiGroups:
       - cert-manager.io
     resources:
       - certificates
     verbs:
       - list
       - watch
       - get
       - update
       - create
       - delete
   - apiGroups:
       - externaldns.angie.software
     resources:
       - dnsendpoints
     verbs:
       - list
       - watch
       - get
       - update
       - create
       - delete
   - apiGroups:
     - externaldns.angie.software
     resources:
     - dnsendpoints/status
     verbs:
     - update
   ---
   kind: ClusterRoleBinding
   apiVersion: rbac.authorization.k8s.io/v1
   metadata:
     name: angie-ingress
   subjects:
   - kind: ServiceAccount
     name: angie-ingress
     namespace: angie-ingress
   roleRef:
     kind: ClusterRole
     name: angie-ingress
     apiGroup: rbac.authorization.k8s.io
   EOF
   ```

## Создание ресурсов

1. Добавьте TLS-сертификат в настройки:
   ```yaml
   $ kubectl apply -f - <<EOF
   apiVersion: v1
   kind: Secret
   metadata:
    name: default-server-secret
    namespace: angie-ingress
   type: kubernetes.io/tls
   data:
    tls.crt: Place TLS Certificate here in base64 format
    tls.key: Place TLS Key here in base64 format
   EOF
   ```
2. Добавьте `ConfigMap` с настройками для Angie PRO:
   ```yaml
   $ kubectl apply -f - <<EOF
   kind: ConfigMap
   apiVersion: v1
   metadata:
    name: angie-config
    namespace: angie-ingress
   data:
   EOF
   ```
3. Создайте `IngressClass`:
   ```yaml
   $ kubectl apply -f - <<EOF
   apiVersion: networking.k8s.io/v1
   kind: IngressClass
   metadata:
    name: angie
   spec:
    controller: angie/ingress-controller
   EOF
   ```
4. Создайте пользовательские ресурсы `VirtualServer`, `VirtualServerRoute`,
   `TransportServer` и `Policy`:

   ### Пример Virtual Server

   ```yaml
   $ kubectl apply -f - <<EOF
   apiVersion: apiextensions.k8s.io/v1
   kind: CustomResourceDefinition
   metadata:
     annotations:
       controller-gen.kubebuilder.io/version: v0.11.3
     creationTimestamp: null
     name: virtualservers.k8s.angie.software
   spec:
     group: k8s.angie.software
     names:
       kind: VirtualServer
       listKind: VirtualServerList
       plural: virtualservers
       shortNames:
         - vs
       singular: virtualserver
     scope: Namespaced
     versions:
       - additionalPrinterColumns:
           - description: Current state of the VirtualServer. If the resource has a valid status, it means it has been validated and accepted by ANIC.
             jsonPath: .status.state
             name: State
             type: string
           - jsonPath: .spec.host
             name: Host
             type: string
           - jsonPath: .status.externalEndpoints[*].ip
             name: IP
             type: string
           - jsonPath: .status.externalEndpoints[*].hostname
             name: ExternalHostname
             priority: 1
             type: string
           - jsonPath: .status.externalEndpoints[*].ports
             name: Ports
             type: string
           - jsonPath: .metadata.creationTimestamp
             name: Age
             type: date
         name: v1
         schema:
           openAPIV3Schema:
             description: VirtualServer defines the VirtualServer resource.
             type: object
             properties:
               apiVersion:
                 description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                 type: string
               kind:
                 description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                 type: string
               metadata:
                 type: object
               spec:
                 description: VirtualServerSpec is the spec of the VirtualServer resource.
                 type: object
                 properties:
                   dos:
                     type: string
                   externalDNS:
                     description: ExternalDNS defines externaldns sub-resource of a virtual server.
                     type: object
                     properties:
                       enable:
                         type: boolean
                       labels:
                         description: Labels stores labels defined for the Endpoint
                         type: object
                         additionalProperties:
                           type: string
                       providerSpecific:
                         description: ProviderSpecific stores provider specific config
                         type: array
                         items:
                           description: ProviderSpecificProperty defines specific property for using with ExternalDNS sub-resource.
                           type: object
                           properties:
                             name:
                               description: Name of the property
                               type: string
                             value:
                               description: Value of the property
                               type: string
                       recordTTL:
                         description: TTL for the record
                         type: integer
                         format: int64
                       recordType:
                         type: string
                   host:
                     type: string
                   http-snippets:
                     type: string
                   ingressClassName:
                     type: string
                   policies:
                     type: array
                     items:
                       description: PolicyReference references a policy by name and an optional namespace.
                       type: object
                       properties:
                         name:
                           type: string
                         namespace:
                           type: string
                   routes:
                     type: array
                     items:
                       description: Route defines a route.
                       type: object
                       properties:
                         action:
                           description: Action defines an action.
                           type: object
                           properties:
                             pass:
                               type: string
                             proxy:
                               description: ActionProxy defines a proxy in an Action.
                               type: object
                               properties:
                                 requestHeaders:
                                   description: ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.
                                   type: object
                                   properties:
                                     pass:
                                       type: boolean
                                     set:
                                       type: array
                                       items:
                                         description: Header defines an HTTP Header.
                                         type: object
                                         properties:
                                           name:
                                             type: string
                                           value:
                                             type: string
                                 responseHeaders:
                                   description: ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.
                                   type: object
                                   properties:
                                     add:
                                       type: array
                                       items:
                                         description: AddHeader defines an HTTP Header with an optional Always field to use with the add_header directive.
                                         type: object
                                         properties:
                                           always:
                                             type: boolean
                                           name:
                                             type: string
                                           value:
                                             type: string
                                     hide:
                                       type: array
                                       items:
                                         type: string
                                     ignore:
                                       type: array
                                       items:
                                         type: string
                                     pass:
                                       type: array
                                       items:
                                         type: string
                                 rewritePath:
                                   type: string
                                 upstream:
                                   type: string
                             redirect:
                               description: ActionRedirect defines a redirect in an Action.
                               type: object
                               properties:
                                 code:
                                   type: integer
                                 url:
                                   type: string
                             return:
                               description: ActionReturn defines a return in an Action.
                               type: object
                               properties:
                                 body:
                                   type: string
                                 code:
                                   type: integer
                                 type:
                                   type: string
                         dos:
                           type: string
                         errorPages:
                           type: array
                           items:
                             description: ErrorPage defines an ErrorPage in a Route.
                             type: object
                             properties:
                               codes:
                                 type: array
                                 items:
                                   type: integer
                               redirect:
                                 description: ErrorPageRedirect defines a redirect for an ErrorPage.
                                 type: object
                                 properties:
                                   code:
                                     type: integer
                                   url:
                                     type: string
                               return:
                                 description: ErrorPageReturn defines a return for an ErrorPage.
                                 type: object
                                 properties:
                                   body:
                                     type: string
                                   code:
                                     type: integer
                                   headers:
                                     type: array
                                     items:
                                       description: Header defines an HTTP Header.
                                       type: object
                                       properties:
                                         name:
                                           type: string
                                         value:
                                           type: string
                                   type:
                                     type: string
                         location-snippets:
                           type: string
                         matches:
                           type: array
                           items:
                             description: Match defines a match.
                             type: object
                             properties:
                               action:
                                 description: Action defines an action.
                                 type: object
                                 properties:
                                   pass:
                                     type: string
                                   proxy:
                                     description: ActionProxy defines a proxy in an Action.
                                     type: object
                                     properties:
                                       requestHeaders:
                                         description: ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.
                                         type: object
                                         properties:
                                           pass:
                                             type: boolean
                                           set:
                                             type: array
                                             items:
                                               description: Header defines an HTTP Header.
                                               type: object
                                               properties:
                                                 name:
                                                   type: string
                                                 value:
                                                   type: string
                                       responseHeaders:
                                         description: ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.
                                         type: object
                                         properties:
                                           add:
                                             type: array
                                             items:
                                               description: AddHeader defines an HTTP Header with an optional Always field to use with the add_header directive.
                                               type: object
                                               properties:
                                                 always:
                                                   type: boolean
                                                 name:
                                                   type: string
                                                 value:
                                                   type: string
                                           hide:
                                             type: array
                                             items:
                                               type: string
                                           ignore:
                                             type: array
                                             items:
                                               type: string
                                           pass:
                                             type: array
                                             items:
                                               type: string
                                       rewritePath:
                                         type: string
                                       upstream:
                                         type: string
                                   redirect:
                                     description: ActionRedirect defines a redirect in an Action.
                                     type: object
                                     properties:
                                       code:
                                         type: integer
                                       url:
                                         type: string
                                   return:
                                     description: ActionReturn defines a return in an Action.
                                     type: object
                                     properties:
                                       body:
                                         type: string
                                       code:
                                         type: integer
                                       type:
                                         type: string
                               conditions:
                                 type: array
                                 items:
                                   description: Condition defines a condition in a MatchRule.
                                   type: object
                                   properties:
                                     argument:
                                       type: string
                                     cookie:
                                       type: string
                                     header:
                                       type: string
                                     value:
                                       type: string
                                     variable:
                                       type: string
                               splits:
                                 type: array
                                 items:
                                   description: Split defines a split.
                                   type: object
                                   properties:
                                     action:
                                       description: Action defines an action.
                                       type: object
                                       properties:
                                         pass:
                                           type: string
                                         proxy:
                                           description: ActionProxy defines a proxy in an Action.
                                           type: object
                                           properties:
                                             requestHeaders:
                                               description: ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.
                                               type: object
                                               properties:
                                                 pass:
                                                   type: boolean
                                                 set:
                                                   type: array
                                                   items:
                                                     description: Header defines an HTTP Header.
                                                     type: object
                                                     properties:
                                                       name:
                                                         type: string
                                                       value:
                                                         type: string
                                             responseHeaders:
                                               description: ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.
                                               type: object
                                               properties:
                                                 add:
                                                   type: array
                                                   items:
                                                     description: AddHeader defines an HTTP Header with an optional Always field to use with the add_header directive.
                                                     type: object
                                                     properties:
                                                       always:
                                                         type: boolean
                                                       name:
                                                         type: string
                                                       value:
                                                         type: string
                                                 hide:
                                                   type: array
                                                   items:
                                                     type: string
                                                 ignore:
                                                   type: array
                                                   items:
                                                     type: string
                                                 pass:
                                                   type: array
                                                   items:
                                                     type: string
                                             rewritePath:
                                               type: string
                                             upstream:
                                               type: string
                                         redirect:
                                           description: ActionRedirect defines a redirect in an Action.
                                           type: object
                                           properties:
                                             code:
                                               type: integer
                                             url:
                                               type: string
                                         return:
                                           description: ActionReturn defines a return in an Action.
                                           type: object
                                           properties:
                                             body:
                                               type: string
                                             code:
                                               type: integer
                                             type:
                                               type: string
                                     weight:
                                       type: integer
                         path:
                           type: string
                         policies:
                           type: array
                           items:
                             description: PolicyReference references a policy by name and an optional namespace.
                             type: object
                             properties:
                               name:
                                 type: string
                               namespace:
                                 type: string
                         route:
                           type: string
                         splits:
                           type: array
                           items:
                             description: Split defines a split.
                             type: object
                             properties:
                               action:
                                 description: Action defines an action.
                                 type: object
                                 properties:
                                   pass:
                                     type: string
                                   proxy:
                                     description: ActionProxy defines a proxy in an Action.
                                     type: object
                                     properties:
                                       requestHeaders:
                                         description: ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.
                                         type: object
                                         properties:
                                           pass:
                                             type: boolean
                                           set:
                                             type: array
                                             items:
                                               description: Header defines an HTTP Header.
                                               type: object
                                               properties:
                                                 name:
                                                   type: string
                                                 value:
                                                   type: string
                                       responseHeaders:
                                         description: ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.
                                         type: object
                                         properties:
                                           add:
                                             type: array
                                             items:
                                               description: AddHeader defines an HTTP Header with an optional Always field to use with the add_header directive.
                                               type: object
                                               properties:
                                                 always:
                                                   type: boolean
                                                 name:
                                                   type: string
                                                 value:
                                                   type: string
                                           hide:
                                             type: array
                                             items:
                                               type: string
                                           ignore:
                                             type: array
                                             items:
                                               type: string
                                           pass:
                                             type: array
                                             items:
                                               type: string
                                       rewritePath:
                                         type: string
                                       upstream:
                                         type: string
                                   redirect:
                                     description: ActionRedirect defines a redirect in an Action.
                                     type: object
                                     properties:
                                       code:
                                         type: integer
                                       url:
                                         type: string
                                   return:
                                     description: ActionReturn defines a return in an Action.
                                     type: object
                                     properties:
                                       body:
                                         type: string
                                       code:
                                         type: integer
                                       type:
                                         type: string
                               weight:
                                 type: integer
                   server-snippets:
                     type: string
                   tls:
                     description: TLS defines TLS configuration for a VirtualServer.
                     type: object
                     properties:
                       cert-manager:
                         description: CertManager defines a cert manager config for a TLS.
                         type: object
                         properties:
                           cluster-issuer:
                             type: string
                           common-name:
                             type: string
                           duration:
                             type: string
                           issuer:
                             type: string
                           issuer-group:
                             type: string
                           issuer-kind:
                             type: string
                           renew-before:
                             type: string
                           usages:
                             type: string
                       redirect:
                         description: TLSRedirect defines a redirect for a TLS.
                         type: object
                         properties:
                           basedOn:
                             type: string
                           code:
                             type: integer
                           enable:
                             type: boolean
                       secret:
                         type: string
                   upstreams:
                     type: array
                     items:
                       description: Upstream defines an upstream.
                       type: object
                       properties:
                         buffer-size:
                           type: string
                         buffering:
                           type: boolean
                         buffers:
                           description: UpstreamBuffers defines Buffer Configuration for an Upstream.
                           type: object
                           properties:
                             number:
                               type: integer
                             size:
                               type: string
                         client-max-body-size:
                           type: string
                         connect-timeout:
                           type: string
                         fail-timeout:
                           type: string
                         healthCheck:
                           description: HealthCheck defines the parameters for active Upstream HealthChecks.
                           type: object
                           properties:
                             connect-timeout:
                               type: string
                             enable:
                               type: boolean
                             fails:
                               type: integer
                             grpcService:
                               type: string
                             grpcStatus:
                               type: integer
                             headers:
                               type: array
                               items:
                                 description: Header defines an HTTP Header.
                                 type: object
                                 properties:
                                   name:
                                     type: string
                                   value:
                                     type: string
                             interval:
                               type: string
                             jitter:
                               type: string
                             keepalive-time:
                               type: string
                             mandatory:
                               type: boolean
                             passes:
                               type: integer
                             path:
                               type: string
                             persistent:
                               type: boolean
                             port:
                               type: integer
                             read-timeout:
                               type: string
                             send-timeout:
                               type: string
                             statusMatch:
                               type: string
                             tls:
                               description: UpstreamTLS defines a TLS configuration for an Upstream.
                               type: object
                               properties:
                                 enable:
                                   type: boolean
                         keepalive:
                           type: integer
                         lb-method:
                           type: string
                         max-conns:
                           type: integer
                         max-fails:
                           type: integer
                         name:
                           type: string
                         next-upstream:
                           type: string
                         next-upstream-timeout:
                           type: string
                         next-upstream-tries:
                           type: integer
                         ntlm:
                           type: boolean
                         port:
                           type: integer
                         queue:
                           description: UpstreamQueue defines Queue Configuration for an Upstream.
                           type: object
                           properties:
                             size:
                               type: integer
                             timeout:
                               type: string
                         read-timeout:
                           type: string
                         send-timeout:
                           type: string
                         service:
                           type: string
                         sessionCookie:
                           description: SessionCookie defines the parameters for session persistence.
                           type: object
                           properties:
                             domain:
                               type: string
                             enable:
                               type: boolean
                             expires:
                               type: string
                             httpOnly:
                               type: boolean
                             name:
                               type: string
                             path:
                               type: string
                             secure:
                               type: boolean
                         slow-start:
                           type: string
                         subselector:
                           type: object
                           additionalProperties:
                             type: string
                         tls:
                           description: UpstreamTLS defines a TLS configuration for an Upstream.
                           type: object
                           properties:
                             enable:
                               type: boolean
                         type:
                           type: string
                         use-cluster-ip:
                           type: boolean
               status:
                 description: VirtualServerStatus defines the status for the VirtualServer resource.
                 type: object
                 properties:
                   externalEndpoints:
                     type: array
                     items:
                       description: ExternalEndpoint defines the IP/ Hostname and ports used to connect to this resource.
                       type: object
                       properties:
                         hostname:
                           type: string
                         ip:
                           type: string
                         ports:
                           type: string
                   message:
                     type: string
                   reason:
                     type: string
                   state:
                     type: string
         served: true
         storage: true
         subresources:
           status: {}
   EOF
   ```

   ### Пример VirtualServerRoute

   ```yaml
   $ kubectl apply -f - <<EOF
   apiVersion: apiextensions.k8s.io/v1
   kind: CustomResourceDefinition
   metadata:
     annotations:
       controller-gen.kubebuilder.io/version: v0.11.3
     creationTimestamp: null
     name: virtualserverroutes.k8s.angie.software
   spec:
     group: k8s.angie.software
     names:
       kind: VirtualServerRoute
       listKind: VirtualServerRouteList
       plural: virtualserverroutes
       shortNames:
         - vsr
       singular: virtualserverroute
     scope: Namespaced
     versions:
       - additionalPrinterColumns:
           - description: Current state of the VirtualServerRoute. If the resource has a valid status, it means it has been validated and accepted by ANIC.
             jsonPath: .status.state
             name: State
             type: string
           - jsonPath: .spec.host
             name: Host
             type: string
           - jsonPath: .status.externalEndpoints[*].ip
             name: IP
             type: string
           - jsonPath: .status.externalEndpoints[*].hostname
             name: ExternalHostname
             priority: 1
             type: string
           - jsonPath: .status.externalEndpoints[*].ports
             name: Ports
             type: string
           - jsonPath: .metadata.creationTimestamp
             name: Age
             type: date
         name: v1
         schema:
           openAPIV3Schema:
             description: VirtualServerRoute defines the VirtualServerRoute resource.
             type: object
             properties:
               apiVersion:
                 description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                 type: string
               kind:
                 description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                 type: string
               metadata:
                 type: object
               spec:
                 description: VirtualServerRouteSpec is the spec of the VirtualServerRoute resource.
                 type: object
                 properties:
                   host:
                     type: string
                   ingressClassName:
                     type: string
                   subroutes:
                     type: array
                     items:
                       description: Route defines a route.
                       type: object
                       properties:
                         action:
                           description: Action defines an action.
                           type: object
                           properties:
                             pass:
                               type: string
                             proxy:
                               description: ActionProxy defines a proxy in an Action.
                               type: object
                               properties:
                                 requestHeaders:
                                   description: ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.
                                   type: object
                                   properties:
                                     pass:
                                       type: boolean
                                     set:
                                       type: array
                                       items:
                                         description: Header defines an HTTP Header.
                                         type: object
                                         properties:
                                           name:
                                             type: string
                                           value:
                                             type: string
                                 responseHeaders:
                                   description: ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.
                                   type: object
                                   properties:
                                     add:
                                       type: array
                                       items:
                                         description: AddHeader defines an HTTP Header with an optional Always field to use with the add_header directive.
                                         type: object
                                         properties:
                                           always:
                                             type: boolean
                                           name:
                                             type: string
                                           value:
                                             type: string
                                     hide:
                                       type: array
                                       items:
                                         type: string
                                     ignore:
                                       type: array
                                       items:
                                         type: string
                                     pass:
                                       type: array
                                       items:
                                         type: string
                                 rewritePath:
                                   type: string
                                 upstream:
                                   type: string
                             redirect:
                               description: ActionRedirect defines a redirect in an Action.
                               type: object
                               properties:
                                 code:
                                   type: integer
                                 url:
                                   type: string
                             return:
                               description: ActionReturn defines a return in an Action.
                               type: object
                               properties:
                                 body:
                                   type: string
                                 code:
                                   type: integer
                                 type:
                                   type: string
                         dos:
                           type: string
                         errorPages:
                           type: array
                           items:
                             description: ErrorPage defines an ErrorPage in a Route.
                             type: object
                             properties:
                               codes:
                                 type: array
                                 items:
                                   type: integer
                               redirect:
                                 description: ErrorPageRedirect defines a redirect for an ErrorPage.
                                 type: object
                                 properties:
                                   code:
                                     type: integer
                                   url:
                                     type: string
                               return:
                                 description: ErrorPageReturn defines a return for an ErrorPage.
                                 type: object
                                 properties:
                                   body:
                                     type: string
                                   code:
                                     type: integer
                                   headers:
                                     type: array
                                     items:
                                       description: Header defines an HTTP Header.
                                       type: object
                                       properties:
                                         name:
                                           type: string
                                         value:
                                           type: string
                                   type:
                                     type: string
                         location-snippets:
                           type: string
                         matches:
                           type: array
                           items:
                             description: Match defines a match.
                             type: object
                             properties:
                               action:
                                 description: Action defines an action.
                                 type: object
                                 properties:
                                   pass:
                                     type: string
                                   proxy:
                                     description: ActionProxy defines a proxy in an Action.
                                     type: object
                                     properties:
                                       requestHeaders:
                                         description: ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.
                                         type: object
                                         properties:
                                           pass:
                                             type: boolean
                                           set:
                                             type: array
                                             items:
                                               description: Header defines an HTTP Header.
                                               type: object
                                               properties:
                                                 name:
                                                   type: string
                                                 value:
                                                   type: string
                                       responseHeaders:
                                         description: ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.
                                         type: object
                                         properties:
                                           add:
                                             type: array
                                             items:
                                               description: AddHeader defines an HTTP Header with an optional Always field to use with the add_header directive.
                                               type: object
                                               properties:
                                                 always:
                                                   type: boolean
                                                 name:
                                                   type: string
                                                 value:
                                                   type: string
                                           hide:
                                             type: array
                                             items:
                                               type: string
                                           ignore:
                                             type: array
                                             items:
                                               type: string
                                           pass:
                                             type: array
                                             items:
                                               type: string
                                       rewritePath:
                                         type: string
                                       upstream:
                                         type: string
                                   redirect:
                                     description: ActionRedirect defines a redirect in an Action.
                                     type: object
                                     properties:
                                       code:
                                         type: integer
                                       url:
                                         type: string
                                   return:
                                     description: ActionReturn defines a return in an Action.
                                     type: object
                                     properties:
                                       body:
                                         type: string
                                       code:
                                         type: integer
                                       type:
                                         type: string
                               conditions:
                                 type: array
                                 items:
                                   description: Condition defines a condition in a MatchRule.
                                   type: object
                                   properties:
                                     argument:
                                       type: string
                                     cookie:
                                       type: string
                                     header:
                                       type: string
                                     value:
                                       type: string
                                     variable:
                                       type: string
                               splits:
                                 type: array
                                 items:
                                   description: Split defines a split.
                                   type: object
                                   properties:
                                     action:
                                       description: Action defines an action.
                                       type: object
                                       properties:
                                         pass:
                                           type: string
                                         proxy:
                                           description: ActionProxy defines a proxy in an Action.
                                           type: object
                                           properties:
                                             requestHeaders:
                                               description: ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.
                                               type: object
                                               properties:
                                                 pass:
                                                   type: boolean
                                                 set:
                                                   type: array
                                                   items:
                                                     description: Header defines an HTTP Header.
                                                     type: object
                                                     properties:
                                                       name:
                                                         type: string
                                                       value:
                                                         type: string
                                             responseHeaders:
                                               description: ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.
                                               type: object
                                               properties:
                                                 add:
                                                   type: array
                                                   items:
                                                     description: AddHeader defines an HTTP Header with an optional Always field to use with the add_header directive.
                                                     type: object
                                                     properties:
                                                       always:
                                                         type: boolean
                                                       name:
                                                         type: string
                                                       value:
                                                         type: string
                                                 hide:
                                                   type: array
                                                   items:
                                                     type: string
                                                 ignore:
                                                   type: array
                                                   items:
                                                     type: string
                                                 pass:
                                                   type: array
                                                   items:
                                                     type: string
                                             rewritePath:
                                               type: string
                                             upstream:
                                               type: string
                                         redirect:
                                           description: ActionRedirect defines a redirect in an Action.
                                           type: object
                                           properties:
                                             code:
                                               type: integer
                                             url:
                                               type: string
                                         return:
                                           description: ActionReturn defines a return in an Action.
                                           type: object
                                           properties:
                                             body:
                                               type: string
                                             code:
                                               type: integer
                                             type:
                                               type: string
                                     weight:
                                       type: integer
                         path:
                           type: string
                         policies:
                           type: array
                           items:
                             description: PolicyReference references a policy by name and an optional namespace.
                             type: object
                             properties:
                               name:
                                 type: string
                               namespace:
                                 type: string
                         route:
                           type: string
                         splits:
                           type: array
                           items:
                             description: Split defines a split.
                             type: object
                             properties:
                               action:
                                 description: Action defines an action.
                                 type: object
                                 properties:
                                   pass:
                                     type: string
                                   proxy:
                                     description: ActionProxy defines a proxy in an Action.
                                     type: object
                                     properties:
                                       requestHeaders:
                                         description: ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.
                                         type: object
                                         properties:
                                           pass:
                                             type: boolean
                                           set:
                                             type: array
                                             items:
                                               description: Header defines an HTTP Header.
                                               type: object
                                               properties:
                                                 name:
                                                   type: string
                                                 value:
                                                   type: string
                                       responseHeaders:
                                         description: ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.
                                         type: object
                                         properties:
                                           add:
                                             type: array
                                             items:
                                               description: AddHeader defines an HTTP Header with an optional Always field to use with the add_header directive.
                                               type: object
                                               properties:
                                                 always:
                                                   type: boolean
                                                 name:
                                                   type: string
                                                 value:
                                                   type: string
                                           hide:
                                             type: array
                                             items:
                                               type: string
                                           ignore:
                                             type: array
                                             items:
                                               type: string
                                           pass:
                                             type: array
                                             items:
                                               type: string
                                       rewritePath:
                                         type: string
                                       upstream:
                                         type: string
                                   redirect:
                                     description: ActionRedirect defines a redirect in an Action.
                                     type: object
                                     properties:
                                       code:
                                         type: integer
                                       url:
                                         type: string
                                   return:
                                     description: ActionReturn defines a return in an Action.
                                     type: object
                                     properties:
                                       body:
                                         type: string
                                       code:
                                         type: integer
                                       type:
                                         type: string
                               weight:
                                 type: integer
                   upstreams:
                     type: array
                     items:
                       description: Upstream defines an upstream.
                       type: object
                       properties:
                         buffer-size:
                           type: string
                         buffering:
                           type: boolean
                         buffers:
                           description: UpstreamBuffers defines Buffer Configuration for an Upstream.
                           type: object
                           properties:
                             number:
                               type: integer
                             size:
                               type: string
                         client-max-body-size:
                           type: string
                         connect-timeout:
                           type: string
                         fail-timeout:
                           type: string
                         healthCheck:
                           description: HealthCheck defines the parameters for active Upstream HealthChecks.
                           type: object
                           properties:
                             connect-timeout:
                               type: string
                             enable:
                               type: boolean
                             fails:
                               type: integer
                             grpcService:
                               type: string
                             grpcStatus:
                               type: integer
                             headers:
                               type: array
                               items:
                                 description: Header defines an HTTP Header.
                                 type: object
                                 properties:
                                   name:
                                     type: string
                                   value:
                                     type: string
                             interval:
                               type: string
                             jitter:
                               type: string
                             keepalive-time:
                               type: string
                             mandatory:
                               type: boolean
                             passes:
                               type: integer
                             path:
                               type: string
                             persistent:
                               type: boolean
                             port:
                               type: integer
                             read-timeout:
                               type: string
                             send-timeout:
                               type: string
                             statusMatch:
                               type: string
                             tls:
                               description: UpstreamTLS defines a TLS configuration for an Upstream.
                               type: object
                               properties:
                                 enable:
                                   type: boolean
                         keepalive:
                           type: integer
                         lb-method:
                           type: string
                         max-conns:
                           type: integer
                         max-fails:
                           type: integer
                         name:
                           type: string
                         next-upstream:
                           type: string
                         next-upstream-timeout:
                           type: string
                         next-upstream-tries:
                           type: integer
                         ntlm:
                           type: boolean
                         port:
                           type: integer
                         queue:
                           description: UpstreamQueue defines Queue Configuration for an Upstream.
                           type: object
                           properties:
                             size:
                               type: integer
                             timeout:
                               type: string
                         read-timeout:
                           type: string
                         send-timeout:
                           type: string
                         service:
                           type: string
                         sessionCookie:
                           description: SessionCookie defines the parameters for session persistence.
                           type: object
                           properties:
                             domain:
                               type: string
                             enable:
                               type: boolean
                             expires:
                               type: string
                             httpOnly:
                               type: boolean
                             name:
                               type: string
                             path:
                               type: string
                             secure:
                               type: boolean
                         slow-start:
                           type: string
                         subselector:
                           type: object
                           additionalProperties:
                             type: string
                         tls:
                           description: UpstreamTLS defines a TLS configuration for an Upstream.
                           type: object
                           properties:
                             enable:
                               type: boolean
                         type:
                           type: string
                         use-cluster-ip:
                           type: boolean
               status:
                 description: VirtualServerRouteStatus defines the status for the VirtualServerRoute resource.
                 type: object
                 properties:
                   externalEndpoints:
                     type: array
                     items:
                       description: ExternalEndpoint defines the IP/ Hostname and ports used to connect to this resource.
                       type: object
                       properties:
                         hostname:
                           type: string
                         ip:
                           type: string
                         ports:
                           type: string
                   message:
                     type: string
                   reason:
                     type: string
                   referencedBy:
                     type: string
                   state:
                     type: string
         served: true
         storage: true
         subresources:
           status: {}
   EOF
   ```

   ### Пример TransportServer

   ```yaml
   $ kubectl apply -f - <<EOF
   apiVersion: apiextensions.k8s.io/v1
   kind: CustomResourceDefinition
   metadata:
     annotations:
       controller-gen.kubebuilder.io/version: v0.11.3
     creationTimestamp: null
     name: transportservers.k8s.angie.software
   spec:
     group: k8s.angie.software
     names:
       kind: TransportServer
       listKind: TransportServerList
       plural: transportservers
       shortNames:
         - ts
       singular: transportserver
     scope: Namespaced
     versions:
       - additionalPrinterColumns:
           - description: Current state of the TransportServer. If the resource has a valid status, it means it has been validated and accepted by ANIC.
             jsonPath: .status.state
             name: State
             type: string
           - jsonPath: .status.reason
             name: Reason
             type: string
           - jsonPath: .metadata.creationTimestamp
             name: Age
             type: date
         name: v1alpha1
         schema:
           openAPIV3Schema:
             description: TransportServer defines the TransportServer resource.
             type: object
             properties:
               apiVersion:
                 description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                 type: string
               kind:
                 description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                 type: string
               metadata:
                 type: object
               spec:
                 description: TransportServerSpec is the spec of the TransportServer resource.
                 type: object
                 properties:
                   action:
                     description: Action defines an action.
                     type: object
                     properties:
                       pass:
                         type: string
                   host:
                     type: string
                   ingressClassName:
                     type: string
                   listener:
                     description: TransportServerListener defines a listener for a TransportServer.
                     type: object
                     properties:
                       name:
                         type: string
                       protocol:
                         type: string
                   serverSnippets:
                     type: string
                   sessionParameters:
                     description: SessionParameters defines session parameters.
                     type: object
                     properties:
                       timeout:
                         type: string
                   streamSnippets:
                     type: string
                   tls:
                     description: TLS defines TLS configuration for a TransportServer.
                     type: object
                     properties:
                       secret:
                         type: string
                   upstreamParameters:
                     description: UpstreamParameters defines parameters for an upstream.
                     type: object
                     properties:
                       connectTimeout:
                         type: string
                       nextUpstream:
                         type: boolean
                       nextUpstreamTimeout:
                         type: string
                       nextUpstreamTries:
                         type: integer
                       udpRequests:
                         type: integer
                       udpResponses:
                         type: integer
                   upstreams:
                     type: array
                     items:
                       description: Upstream defines an upstream.
                       type: object
                       properties:
                         failTimeout:
                           type: string
                         healthCheck:
                           description: HealthCheck defines the parameters for active Upstream HealthChecks.
                           type: object
                           properties:
                             enable:
                               type: boolean
                             fails:
                               type: integer
                             interval:
                               type: string
                             jitter:
                               type: string
                             match:
                               description: Match defines the parameters of a custom health check.
                               type: object
                               properties:
                                 expect:
                                   type: string
                                 send:
                                   type: string
                             passes:
                               type: integer
                             port:
                               type: integer
                             timeout:
                               type: string
                         loadBalancingMethod:
                           type: string
                         maxConns:
                           type: integer
                         maxFails:
                           type: integer
                         name:
                           type: string
                         port:
                           type: integer
                         service:
                           type: string
               status:
                 description: TransportServerStatus defines the status for the TransportServer resource.
                 type: object
                 properties:
                   message:
                     type: string
                   reason:
                     type: string
                   state:
                     type: string
         served: true
         storage: true
         subresources:
           status: {}
     EOF
   ```

   ### Пример Policy

   ```yaml
   $ kubectl apply -f - <<EOF
   apiVersion: apiextensions.k8s.io/v1
   kind: CustomResourceDefinition
   metadata:
     annotations:
       controller-gen.kubebuilder.io/version: v0.11.3
     creationTimestamp: null
     name: policies.k8s.angie.software
   spec:
     group: k8s.angie.software
     names:
       kind: Policy
       listKind: PolicyList
       plural: policies
       shortNames:
         - pol
       singular: policy
     scope: Namespaced
     versions:
       - additionalPrinterColumns:
           - description: Current state of the Policy. If the resource has a valid status, it means it has been validated and accepted by ANIC.
             jsonPath: .status.state
             name: State
             type: string
           - jsonPath: .metadata.creationTimestamp
             name: Age
             type: date
         name: v1
         schema:
           openAPIV3Schema:
             description: Policy defines a Policy for VirtualServer and VirtualServerRoute resources.
             type: object
             properties:
               apiVersion:
                 description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                 type: string
               kind:
                 description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                 type: string
               metadata:
                 type: object
               spec:
                 description: PolicySpec is the spec of the Policy resource. The spec includes multiple fields, where each field represents a different policy. Only one policy (field) is allowed.
                 type: object
                 properties:
                   accessControl:
                     description: AccessControl defines an access policy based on the source IP of a request.
                     type: object
                     properties:
                       allow:
                         type: array
                         items:
                           type: string
                       deny:
                         type: array
                         items:
                           type: string
                   basicAuth:
                     description: 'BasicAuth holds HTTP Basic authentication configuration policy status: preview'
                     type: object
                     properties:
                       realm:
                         type: string
                       secret:
                         type: string
                   egressMTLS:
                     description: EgressMTLS defines an Egress MTLS policy.
                     type: object
                     properties:
                       ciphers:
                         type: string
                       protocols:
                         type: string
                       serverName:
                         type: boolean
                       sessionReuse:
                         type: boolean
                       sslName:
                         type: string
                       tlsSecret:
                         type: string
                       trustedCertSecret:
                         type: string
                       verifyDepth:
                         type: integer
                       verifyServer:
                         type: boolean
                   ingressClassName:
                     type: string
                   ingressMTLS:
                     description: IngressMTLS defines an Ingress MTLS policy.
                     type: object
                     properties:
                       clientCertSecret:
                         type: string
                       crlFileName:
                         type: string
                       verifyClient:
                         type: string
                       verifyDepth:
                         type: integer
                   jwt:
                     description: JWT holds JWT authentication configuration.
                     realm: string
                     secret: string
                     token: string
                   oidc:
                     description: OIDC defines an Open ID Connect policy.
                     type: object
                     properties:
                       clientID:
                         type: string
                       clientSecret:
                         type: string
                       authEndpoint:
                         type: string
                       jwksURI:
                         type: string
                       tokenEndpoint:
                         type: string
                       scope:
                         type: string
                       accessTokenEnable:
                         type: boolean
                   rateLimit:
                     description: RateLimit defines a rate limit policy.
                     type: object
                     properties:
                       burst:
                         type: integer
                       delay:
                         type: integer
                       dryRun:
                         type: boolean
                       key:
                         type: string
                       logLevel:
                         type: string
                       noDelay:
                         type: boolean
                       rate:
                         type: string
                       rejectCode:
                         type: integer
                       zoneSize:
                         type: string
               status:
                 description: PolicyStatus is the status of the policy resource
                 type: object
                 properties:
                   message:
                     type: string
                   reason:
                     type: string
                   state:
                     type: string
         served: true
         storage: true
         subresources:
           status: {}
       - name: v1alpha1
         schema:
           openAPIV3Schema:
             description: Policy defines a Policy for VirtualServer and VirtualServerRoute resources.
             type: object
             properties:
               apiVersion:
                 description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                 type: string
               kind:
                 description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                 type: string
               metadata:
                 type: object
               spec:
                 description: PolicySpec is the spec of the Policy resource. The spec includes multiple fields, where each field represents a different policy. Only one policy (field) is allowed.
                 type: object
                 properties:
                   accessControl:
                     description: AccessControl defines an access policy based on the source IP of a request.
                     type: object
                     properties:
                       allow:
                         type: array
                         items:
                           type: string
                       deny:
                         type: array
                         items:
                           type: string
                   egressMTLS:
                     description: EgressMTLS defines an Egress MTLS policy.
                     type: object
                     properties:
                       ciphers:
                         type: string
                       protocols:
                         type: string
                       serverName:
                         type: boolean
                       sessionReuse:
                         type: boolean
                       sslName:
                         type: string
                       tlsSecret:
                         type: string
                       trustedCertSecret:
                         type: string
                       verifyDepth:
                         type: integer
                       verifyServer:
                         type: boolean
                   ingressMTLS:
                     description: IngressMTLS defines an Ingress MTLS policy.
                     type: object
                     properties:
                       clientCertSecret:
                         type: string
                       verifyClient:
                         type: string
                       verifyDepth:
                         type: integer
                   jwt:
                     description: JWT holds JWT authentication configuration.
                     realm: string
                     secret: string
                     token: string
                   rateLimit:
                     description: RateLimit defines a rate limit policy.
                     type: object
                     properties:
                       burst:
                         type: integer
                       delay:
                         type: integer
                       dryRun:
                         type: boolean
                       key:
                         type: string
                       logLevel:
                         type: string
                       noDelay:
                         type: boolean
                       rate:
                         type: string
                       rejectCode:
                         type: integer
                       zoneSize:
                         type: string
         served: true
         storage: false
     EOF
   ```
5. Если нужно использовать балансировщик нагрузки для TCP- и UDP-соединений,
   добавьте `GlobalConfiguration`:

   ### Пример

   ```yaml
   $ kubectl apply -f - <<EOF
   apiVersion: apiextensions.k8s.io/v1
   kind: CustomResourceDefinition
   metadata:
     annotations:
       controller-gen.kubebuilder.io/version: v0.11.3
     creationTimestamp: null
     name: globalconfigurations.k8s.angie.software
   spec:
     group: k8s.angie.software
     names:
       kind: GlobalConfiguration
       listKind: GlobalConfigurationList
       plural: globalconfigurations
       shortNames:
         - gc
       singular: globalconfiguration
     scope: Namespaced
     versions:
       - name: v1alpha1
         schema:
           openAPIV3Schema:
             description: GlobalConfiguration defines the GlobalConfiguration resource.
             type: object
             properties:
               apiVersion:
                 description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
                 type: string
               kind:
                 description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
                 type: string
               metadata:
                 type: object
               spec:
                 description: GlobalConfigurationSpec is the spec of the GlobalConfiguration resource.
                 type: object
                 properties:
                   listeners:
                     type: array
                     items:
                       description: Listener defines a listener.
                       type: object
                       properties:
                         name:
                           type: string
                         port:
                           type: integer
                         protocol:
                           type: string
         served: true
         storage: true
   EOF
   ```

## Развертывание ANIC

1. Поддерживаются два варианта использования ANIC:

- `Deployment`: используйте этот тип развертывания, если планируете
  динамически изменять количество реплик ANIC.

  ### Пример Deployment

  ```yaml
  $ kubectl apply -f - <<EOF
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: angie-ingress
    namespace: angie-ingress
  spec:
    replicas: 1
    selector:
      matchLabels:
        app: angie-ingress
    template:
      metadata:
        labels:
          app: angie-ingress
          app.kubernetes.io/name: angie-ingress
      #annotations:
        #prometheus.io/scrape: "true"
        #prometheus.io/port: "9113"
        #prometheus.io/scheme: http
      spec:
        serviceAccountName: angie-ingress
        automountServiceAccountToken: true
        securityContext:
          seccompProfile:
            type: RuntimeDefault
  #        fsGroup: 101 #angie
          sysctls:
            - name: "net.ipv4.ip_unprivileged_port_start"
              value: "0"
  #      volumes:
  #      - name: angie-etc
  #        emptyDir: {}
  #      - name: angie-cache
  #        emptyDir: {}
  #      - name: angie-lib
  #        emptyDir: {}
  #      - name: angie-log
  #        emptyDir: {}
        containers:
        - image: docker.angie.software/angie-ingress:latest
          imagePullPolicy: IfNotPresent
          name: angie-ingress
          ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443
          - name: readiness-port
            containerPort: 8081
          - name: prometheus
            containerPort: 9113
          readinessProbe:
            httpGet:
              path: /angie-ready
              port: readiness-port
            periodSeconds: 1
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
          #limits
          #  cpu: "1"
          #  memory: "1Gi"
          securityContext:
            allowPrivilegeEscalation: false
            runAsUser: 101 #angie
            runAsNonRoot: true
            capabilities:
              drop:
              - ALL
  #        volumeMounts:
  #        - mountPath: /etc/angie
  #          name: angie-etc
  #        - mountPath: /var/cache/angie
  #          name: angie-cache
  #        - mountPath: /var/lib/angie
  #          name: angie-lib
  #        - mountPath: /var/log/angie
  #          name: angie-log
          env:
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          args:
            - -angie-configmaps=$(POD_NAMESPACE)/angie-config
          #- -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret
          #- -include-year
          #- -enable-cert-manager
          #- -enable-external-dns
          #- -v=3 # Enables extensive logging. Useful for troubleshooting.
          #- -report-ingress-status
          #- -external-service=angie-ingress
          #- -enable-prometheus-metrics
          #- -global-configuration=$(POD_NAMESPACE)/angie-configuration
  EOF
  ```

<a id="installation-daemonset"></a>
- `DaemonSet`: используйте этот тип, если планируете развертывать ANIC на
  каждом узле кластера или подмножестве узлов.

  ### Пример DaemonSet

  ```yaml
  $ kubectl apply -f - <<EOF
  apiVersion: apps/v1
  kind: DaemonSet
  metadata:
    name: angie-ingress
    namespace: angie-ingress
  spec:
    selector:
      matchLabels:
        app: angie-ingress
    template:
      metadata:
        labels:
          app: angie-ingress
          app.kubernetes.io/name: angie-ingress
      spec:
        serviceAccountName: angie-ingress
        automountServiceAccountToken: true
        securityContext:
          seccompProfile:
            type: RuntimeDefault
          sysctls:
            - name: "net.ipv4.ip_unprivileged_port_start"
              value: "0"
        containers:
        - image: docker.angie.software/angie-ingress:latest
          imagePullPolicy: IfNotPresent
          name: angie-ingress
          ports:
          - name: http
            containerPort: 80
            hostPort: 80
          - name: https
            containerPort: 443
            hostPort: 443
          - name: readiness-port
            containerPort: 8081
          - name: prometheus
            containerPort: 9113
          readinessProbe:
          httpGet:
            path: /angie-ready
            port: readiness-port
          periodSeconds: 1
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
          env:
          - name: POD_NAMESPACE
            valueFrom:
              fieldRef:
                fieldPath: metadata.namespace
          - name: POD_NAME
            valueFrom:
              fieldRef:
                fieldPath: metadata.name
          args:
            - -angie-configmaps=$(POD_NAMESPACE)/angie-config
          #- -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret
          #- -include-year
          #- -v=3 # Enables extensive logging. Useful for troubleshooting.
          #- -report-ingress-status
          #- -external-service=angie-ingress
          #- -enable-prometheus-metrics
          #- -global-configuration=$(POD_NAMESPACE)/angie-configuration
  EOF
  ```
