Конфигурация для нескольких пространств имен#

Ниже приведен пример использования ресурсов VirtualServer и VirtualServerRoute при настройке балансировки нагрузки для модифицированного приложения "cafe" из примера базовой конфигурации. Конфигурация балансировки нагрузки, а также Deployments и Services размещены в нескольких пространствах имен.

Вместо одного пространства имен теперь используются три: tea, coffee и cafe:

  • В пространстве имен tea созданы Deployment, Service и соответствующая конфигурация балансировки нагрузки.

  • В пространстве имен coffee созданы Deployment, Service и соответствующая конфигурация балансировки нагрузки.

  • В пространстве имен cafe создан секрет с TLS-сертификатом и ключом, а также конфигурация балансировки нагрузки для приложения "cafe". Эта конфигурация ссылается на конфигурации coffee и tea.

Предварительные действия#

  1. Установите ANIC с включенными пользовательскими ресурсами.

  2. Сохраните публичный IP-адрес ANIC в переменной оболочки:

    $ IC_IP=XXX.YYY.ZZZ.III
    
  3. Сохраните HTTPS-порт ANIC в переменной оболочки:

    $ IC_HTTPS_PORT=<номер порта>
    

Настройка конфигурации для нескольких пространств имен#

  1. Создайте необходимые пространства имен tea, coffee и cafe:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cafe
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: tea
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: coffee
    

    Примените настройки:

    $ kubectl create -f namespaces.yaml
    
  2. Создайте Deployment и Service для tea в пространстве имен tea:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
      namespace: tea
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: angiesoftware/angie-hello:plain-text
            ports:
            - containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      namespace: tea
    spec:
      ports:
      - port: 80
        targetPort: 8080
        protocol: TCP
        name: http
      selector:
        app: tea
    

    Примените настройки:

    $ kubectl create -f tea.yaml
    
  3. Создайте Deployment и Service для coffee в пространстве имен coffee:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: coffee
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: angiesoftware/angie-hello:plain-text
            ports:
            - containerPort: 8080
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: coffee
    spec:
      ports:
      - port: 80
        targetPort: 8080
        protocol: TCP
        name: http
      selector:
        app: coffee
    

    Примените настройки:

    $ kubectl create -f coffee.yaml
    
  4. Создайте ресурс VirtualServerRoute для tea в пространстве имен tea:

    apiVersion: k8s.angie.software/v1
    kind: VirtualServerRoute
    metadata:
      name: tea
      namespace: tea
    spec:
      host: cafe.example.com
      upstreams:
      - name: tea
        service: tea-svc
        port: 80
      subroutes:
      - path: /tea
        action:
          pass: tea
    

    Примените настройки:

    $ kubectl create -f tea-virtual-server-route.yaml
    
  5. Создайте ресурс VirtualServerRoute для coffee в пространстве имен coffee:

    apiVersion: k8s.angie.software/v1
    kind: VirtualServerRoute
    metadata:
      name: coffee
      namespace: coffee
    spec:
      host: cafe.example.com
      upstreams:
      - name: coffee
        service: coffee-svc
        port: 80
      subroutes:
      - path: /coffee
        action:
          pass: coffee
    

    Примените настройки:

    $ kubectl create -f coffee-virtual-server-route.yaml
    
  6. Создайте секрет с TLS-сертификатом и ключом в пространстве имен cafe:

    apiVersion: v1
    kind: Secret
    metadata:
      name: cafe-secret
      namespace: cafe
    type: kubernetes.io/tls
    data:
      tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURMakNDQWhZQ0NRREFPRjl0THNhWFdqQU5CZ2txaGtpRzl3MEJBUXNGQURCYU1Rc3dDUVlEVlFRR0V3SlYKVXpFTE1Ba0dBMVVFQ0F3Q1EwRXhJVEFmQmdOVkJBb01HRWx1ZEdWeWJtVjBJRmRwWkdkcGRITWdVSFI1SUV4MApaREViTUJrR0ExVUVBd3dTWTJGbVpTNWxlR0Z0Y0d4bExtTnZiU0FnTUI0WERURTRNRGt4TWpFMk1UVXpOVm9YCkRUSXpNRGt4TVRFMk1UVXpOVm93V0RFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ01Ba05CTVNFd0h3WUQKVlFRS0RCaEpiblJsY201bGRDQlhhV1JuYVhSeklGQjBlU0JNZEdReEdUQVhCZ05WQkFNTUVHTmhabVV1WlhoaApiWEJzWlM1amIyMHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDcDZLbjdzeTgxCnAwanVKL2N5ayt2Q0FtbHNmanRGTTJtdVpOSzBLdGVjcUcyZmpXUWI1NXhRMVlGQTJYT1N3SEFZdlNkd0kyaloKcnVXOHFYWENMMnJiNENaQ0Z4d3BWRUNyY3hkam0zdGVWaVJYVnNZSW1tSkhQUFN5UWdwaW9iczl4N0RsTGM2SQpCQTBaalVPeWwwUHFHOVNKZXhNVjczV0lJYTVyRFZTRjJyNGtTa2JBajREY2o3TFhlRmxWWEgySTVYd1hDcHRDCm42N0pDZzQyZitrOHdnemNSVnA4WFprWldaVmp3cTlSVUtEWG1GQjJZeU4xWEVXZFowZXdSdUtZVUpsc202OTIKc2tPcktRajB2a29QbjQxRUUvK1RhVkVwcUxUUm9VWTNyemc3RGtkemZkQml6Rk8yZHNQTkZ4MkNXMGpYa05MdgpLbzI1Q1pyT2hYQUhBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFLSEZDY3lPalp2b0hzd1VCTWRMClJkSEliMzgzcFdGeW5acS9MdVVvdnNWQTU4QjBDZzdCRWZ5NXZXVlZycTVSSWt2NGxaODFOMjl4MjFkMUpINnIKalNuUXgrRFhDTy9USkVWNWxTQ1VwSUd6RVVZYVVQZ1J5anNNL05VZENKOHVIVmhaSitTNkZBK0NuT0Q5cm4yaQpaQmVQQ0k1ckh3RVh3bm5sOHl3aWozdnZRNXpISXV5QmdsV3IvUXl1aTlmalBwd1dVdlVtNG52NVNNRzl6Q1Y3ClBwdXd2dWF0cWpPMTIwOEJqZkUvY1pISWc4SHc5bXZXOXg5QytJUU1JTURFN2IvZzZPY0s3TEdUTHdsRnh2QTgKN1dqRWVxdW5heUlwaE1oS1JYVmYxTjM0OWVOOThFejM4Zk9USFRQYmRKakZBL1BjQytHeW1lK2lHdDVPUWRGaAp5UkU9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
      tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBcWVpcCs3TXZOYWRJN2lmM01wUHJ3Z0pwYkg0N1JUTnBybVRTdENyWG5LaHRuNDFrCkcrZWNVTldCUU5semtzQndHTDBuY0NObzJhN2x2S2wxd2k5cTIrQW1RaGNjS1ZSQXEzTVhZNXQ3WGxZa1YxYkcKQ0pwaVJ6ejBza0lLWXFHN1BjZXc1UzNPaUFRTkdZMURzcGRENmh2VWlYc1RGZTkxaUNHdWF3MVVoZHErSkVwRwp3SStBM0kreTEzaFpWVng5aU9WOEZ3cWJRcCt1eVFvT05uL3BQTUlNM0VWYWZGMlpHVm1WWThLdlVWQ2cxNWhRCmRtTWpkVnhGbldkSHNFYmltRkNaYkp1dmRySkRxeWtJOUw1S0Q1K05SQlAvazJsUkthaTAwYUZHTjY4NE93NUgKYzMzUVlzeFR0bmJEelJjZGdsdEkxNURTN3lxTnVRbWF6b1Z3QndJREFRQUJBb0lCQVFDUFNkU1luUXRTUHlxbApGZlZGcFRPc29PWVJoZjhzSStpYkZ4SU91UmF1V2VoaEp4ZG01Uk9ScEF6bUNMeUw1VmhqdEptZTIyM2dMcncyCk45OUVqVUtiL1ZPbVp1RHNCYzZvQ0Y2UU5SNThkejhjbk9SVGV3Y290c0pSMXBuMWhobG5SNUhxSkpCSmFzazEKWkVuVVFmY1hackw5NGxvOUpIM0UrVXFqbzFGRnM4eHhFOHdvUEJxalpzVjdwUlVaZ0MzTGh4bndMU0V4eUZvNApjeGI5U09HNU9tQUpvelN0Rm9RMkdKT2VzOHJKNXFmZHZ5dGdnOXhiTGFRTC94MGtwUTYyQm9GTUJEZHFPZVBXCktmUDV6WjYvMDcvdnBqNDh5QTFRMzJQem9idWJzQkxkM0tjbjMyamZtMUU3cHJ0V2wrSmVPRmlPem5CUUZKYk4KNHFQVlJ6NWhBb0dCQU50V3l4aE5DU0x1NFArWGdLeWNrbGpKNkY1NjY4Zk5qNUN6Z0ZScUowOXpuMFRsc05ybwpGVExaY3hEcW5SM0hQWU00MkpFUmgySi9xREZaeW5SUW8zY2czb2VpdlVkQlZHWTgrRkkxVzBxZHViL0w5K3l1CmVkT1pUUTVYbUdHcDZyNmpleHltY0ppbS9Pc0IzWm5ZT3BPcmxEN1NQbUJ2ek5MazRNRjZneGJYQW9HQkFNWk8KMHA2SGJCbWNQMHRqRlhmY0tFNzdJbUxtMHNBRzR1SG9VeDBlUGovMnFyblRuT0JCTkU0TXZnRHVUSnp5K2NhVQprOFJxbWRIQ2JIelRlNmZ6WXEvOWl0OHNaNzdLVk4xcWtiSWN1YytSVHhBOW5OaDFUanNSbmU3NFowajFGQ0xrCmhIY3FIMHJpN1BZU0tIVEU4RnZGQ3haWWRidUI4NENtWmlodnhicFJBb0dBSWJqcWFNWVBUWXVrbENkYTVTNzkKWVNGSjFKelplMUtqYS8vdER3MXpGY2dWQ0thMzFqQXdjaXowZi9sU1JxM0hTMUdHR21lemhQVlRpcUxmZVpxYwpSMGlLYmhnYk9jVlZrSkozSzB5QXlLd1BUdW14S0haNnpJbVpTMGMwYW0rUlk5WUdxNVQ3WXJ6cHpjZnZwaU9VCmZmZTNSeUZUN2NmQ21mb09oREN0enVrQ2dZQjMwb0xDMVJMRk9ycW40M3ZDUzUxemM1em9ZNDR1QnpzcHd3WU4KVHd2UC9FeFdNZjNWSnJEakJDSCtULzZzeXNlUGJKRUltbHpNK0l3eXRGcEFOZmlJWEV0LzQ4WGY2ME54OGdXTQp1SHl4Wlp4L05LdER3MFY4dlgxUE9ucTJBNWVpS2ErOGpSQVJZS0pMWU5kZkR1d29seHZHNmJaaGtQaS80RXRUCjNZMThzUUtCZ0h0S2JrKzdsTkpWZXN3WEU1Y1VHNkVEVXNEZS8yVWE3ZlhwN0ZjanFCRW9hcDFMU3crNlRYcDAKWmdybUtFOEFSek00NytFSkhVdmlpcS9udXBFMTVnMGtKVzNzeWhwVTl6WkxPN2x0QjBLSWtPOVpSY21Vam84UQpjcExsSE1BcWJMSjhXWUdKQ2toaVd4eWFsNmhZVHlXWTRjVmtDMHh0VGwvaFVFOUllTktvCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
    

    Примените настройки:

    $ kubectl create -f cafe-secret.yaml
    
  7. Создайте ресурс VirtualServer для приложения "cafe" в пространстве имен cafe:

    apiVersion: k8s.angie.software/v1
    kind: VirtualServer
    metadata:
      name: cafe
      namespace: cafe
    spec:
      host: cafe.example.com
      tls:
        secret: cafe-secret
      routes:
      - path: /tea
        route: tea/tea
      - path: /coffee
        route: coffee/coffee
    

    Примените настройки:

    $ kubectl create -f cafe-virtual-server.yaml
    
  8. Протестируйте конфигурацию.

    Проверьте, что конфигурация была успешно применена, просмотрев события ресурсов VirtualServerRoute и VirtualServer:

    $ kubectl describe virtualserverroute tea -n tea
    

    Вывод:

    Events:
      Type     Reason                 Age   From                      Message
      ----     ------                 ----  ----                      -------
      Warning  NoVirtualServersFound  2m    ANIC                      No VirtualServer references VirtualServerRoute tea/tea
      Normal   AddedOrUpdated         1m    ANIC                      Configuration for tea/tea was added or updated
    
    $ kubectl describe virtualserverroute coffee -n coffee
    

    Вывод:

    Events:
      Type     Reason                 Age   From                      Message
      ----     ------                 ----  ----                      -------
      Warning  NoVirtualServersFound  2m    ANIC                      No VirtualServer references VirtualServerRoute coffee/coffee
      Normal   AddedOrUpdated         1m    ANIC                      Configuration for coffee/coffee was added or updated
    
    $ kubectl describe virtualserver cafe -n cafe
    

    Вывод:

    Events:
      Type    Reason          Age   From                      Message
      ----    ------          ----  ----                      -------
      Normal  AddedOrUpdated  1m    ANIC                      Configuration for cafe/cafe was added or updated
    
  9. Используйте curl для доступа к приложению. Опция --insecure отключает проверку сертификата, так как используется самоподписанный сертификат. Опция --resolve позволяет установить IP-адрес и HTTPS-порт Ingress-контроллера для доменного имени приложения "cafe".

    Чтобы получить coffee:

    $ curl --resolve cafe.example.com:$IC_HTTPS_PORT:$IC_IP https://cafe.example.com:$IC_HTTPS_PORT/coffee --insecure
    

    Ожидаемый результат:

    Server address: 10.16.1.193:80
    Server name: coffee-7dbb5795f6-mltpf
    ...
    

    Чтобы получить tea:

    $ curl --resolve cafe.example.com:$IC_HTTPS_PORT:$IC_IP https://cafe.example.com:$IC_HTTPS_PORT/tea --insecure
    

    Ожидаемый результат:

    Server address: 10.16.0.157:80
    Server name: tea-7d57856c44-674b8
    ...