Cert-manager#

Ниже приведены примеры:

  • развертывания cert-manager и самоподписанного центра сертификации;

  • развертывания ANIC;

  • развертывания простого веб-приложения;

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

Развертывание cert-manager и самоподписанного центра сертификации#

  1. Разверните cert-manager и все необходимые зависимости:

    $ kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml
    
  2. Разверните Issuer (самоподписанный центр сертификации):

    apiVersion: v1
    kind: Namespace
    metadata:
      name: sandbox
    ---
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: selfsigned-issuer
    spec:
      selfSigned: {}
    ---
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: my-selfsigned-ca
      namespace: sandbox
    spec:
      isCA: true
      commonName: my-selfsigned-ca
      secretName: root-secret
      privateKey:
        algorithm: ECDSA
        size: 256
      issuerRef:
        name: selfsigned-issuer
        kind: ClusterIssuer
        group: cert-manager.io
    ---
    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
      name: my-ca-issuer
      namespace: sandbox
    spec:
      ca:
        secretName: root-secret
    

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

    $ kubectl apply -f self-signed.yaml
    

Запуск примера#

  1. Установите ANIC. Включите поддержку cert-manager для ресурсов VirtualServer:

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

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

    $ IC_HTTPS_PORT=<номер порта>
    
  4. Создайте Deployment и Service для coffee и tea:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
    spec:
      replicas: 2
      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
    spec:
      ports:
      - port: 80
        targetPort: 8080
        protocol: TCP
        name: http
      selector:
        app: coffee
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
    spec:
      replicas: 3
      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
      labels:
    spec:
      ports:
      - port: 80
        targetPort: 8080
        protocol: TCP
        name: http
      selector:
        app: tea
    

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

    $ kubectl create -f cafe.yaml
    
  5. Создайте ресурс VirtualServer:

    apiVersion: k8s.angie.software/v1
    kind: VirtualServer
    metadata:
      name: cafe
    spec:
      host: cafe.example.com
      tls:
        secret: cafe-secret
        cert-manager:
          cluster-issuer: selfsigned-issuer
      upstreams:
      - name: tea
        service: tea-svc
        port: 80
      - name: coffee
        service: coffee-svc
        port: 80
      routes:
      - path: /tea
        action:
          pass: tea
      - path: /coffee
        action:
          pass: coffee
    

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

    $ kubectl create -f cafe-virtual-server.yaml
    
  6. Протестируйте приложение.

    Используйте curl для проверки сервисов coffee и tea: --insecure, чтобы отключить проверку сертификата, и --resolve, чтобы указать заголовок Host в запросе с cafe.example.com.

    Запрос к сервису coffee:

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

    Пример ответа:

    Server address: 10.12.0.18:80
    Server name: coffee-7586895968-r26zn
    ...
    

    Запрос к сервису tea:

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

    Пример ответа:

    Server address: 10.12.0.19:80
    Server name: tea-7cd44fcb4d-xfw2x
    ...