как ссылаться на существующее имя ELB DNSName в шаблоне Cloudformation - PullRequest
0 голосов
/ 11 марта 2020

у нас есть шаблон Cloudformation, с помощью которого мы разворачиваем инфраструктуру для нашего продукта. и ниже компонент AWS, который создается с помощью шаблонов CF: 1. Сетевые компоненты. Как VP C, Подсети, Группы безопасности и т. Д. c. 2. Роли и политики IAM. 3. EMR 4. EKS 5. MSK 6. RDS 7. Elasticache

также в наших шаблонах Cloudformation у нас есть несколько пользовательских ресурсов, таких как «Custom :: KubeManifest». через который мы разворачиваем объекты в кластере AWS EKS. одним из наших объектов kubernetes является объект "Сервис". который создает конечные точки служб для внутренних служб, чтобы запросы из сети publi c могли доходить до нашего кластера kubernetes.

мы хотели проверить, можем ли мы ссылаться на существующие имена ELB DNS в шаблонах Cloudformation, чтобы мы могли покажите ELB DnsName в качестве вывода.

Например, когда мы вызываем ресурсы "Custom :: KubeManifest", как показано ниже, шаблон:

  ServiceDeployment:
    Type: "Custom::KubeManifest"
    Version: '1.0'
    Properties:
      ServiceToken: !Ref KubeManifestLambdaArn
      KubeConfigPath: !Sub "s3://${KubeConfigS3Bucket}/${KubeConfigS3Key}"
      KubeConfigKmsContext: !Ref KmsContext
      Manifest:
        apiVersion: v1
        kind: Service
        metadata:
          name: test
          labels:
            app: client
            tier: master
        spec:
          selector:
            app: client
            tier: master
          ports:
          - name: client-api
            port: 9877
            protocol: TCP
          - name: client-snapshots
            port: 9878
            protocol: TCP
          - name: client-support
            port: 9881
            protocol: TCP
  UiDeployment:
    Type: "Custom::KubeManifest"
    Version: '1.0'
    Properties:
      ServiceToken: !Ref KubeManifestLambdaArn
      KubeConfigPath: !Sub "s3://${KubeConfigS3Bucket}/${KubeConfigS3Key}"
      KubeConfigKmsContext: !Ref KmsContext
      Manifest:
        apiVersion: v1
        kind: Service
        metadata:
          name: client-ui
          annotations:
            service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
            service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
            service.beta.kubernetes.io/aws-load-balancer-type: nlb
            service.beta.kubernetes.io/aws-load-balancer-backend-protocol: 'tcp'
            service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "tcp"
            service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
          labels:
            app: client
            tier: master
        spec:
          type: LoadBalancer
          selector:
            app: client
            tier: master
          ports:
          - name: client-ui
            port: 80
            protocol: TCP
            targetPort: 8800
          - name: client-ui-https
            port: 443
            protocol: TCP
            targetPort: 8800

создает ELB в учетной записи AWS и сопоставляет его с конечными точками службы в кластере EKS. Теперь мы хотим знать, что если с помощью любых функций мы можем ссылаться на вновь созданный ELB DnsNames и показывать его как Output.

Ответы [ 3 ]

1 голос
/ 11 марта 2020

мы взглянули на сообщение: aws -quickstart-examples-eks

, где мы можем получить DnsNames недавно созданного loadBalancer, который сопоставлен с конечной точкой службы используя ресурс

Custom :: KubeGet

.

0 голосов
/ 11 марта 2020

Ю может ссылаться на имя DNS с помощью:

Fn :: GetAtt: [LoadBalancer, DNSName]

LoadBalancer - созданный ресурс балансировщика нагрузки.

0 голосов
/ 11 марта 2020

Это мой пример YAML

Resources:
  LoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      Name: !Ref EnvironmentName
      Subnets: !Ref Subnets
      SecurityGroups:
        - !Ref SecurityGroup
      Tags:
        - Key: Name
          Value: !Ref EnvironmentName

  LoadBalancerListener:
    Type: AWS::ElasticLoadBalancingV2::Listener
    Properties:
      LoadBalancerArn: !Ref LoadBalancer
      Port: 80
      Protocol: HTTP
      DefaultActions:
        - Type: forward
          TargetGroupArn: !Ref DefaultTargetGroup

Оба LoadBalancer и LoadBAlanceListener должны быть включены. Затем необходимо добавить выходные данные, которые объявляют значения, которые вы хотите использовать для вызова API стеков описания.

Outputs:
  LoadBalancer:
    Description: A reference to the Application Load Balancer
    Value: !Ref LoadBalancer

  LoadBalancerUrl:
    Description: The URL of the ALB
    Value: !GetAtt LoadBalancer.DNSName

  Listener:
    Description: A reference to a port 80 listener
    Value: !Ref LoadBalancerListener
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...