예제 #1
0
    def __init__(self, scope: Construct, id: str, name_space):
        super().__init__(scope, id, namespace=name_space)

        app_name = 'kibana'
        app_label = {'dev': app_name}
        k8s.KubeIngressV1Beta1(
            self,
            'KibanaIngress',
            metadata=k8s.ObjectMeta(annotations={
                'kubernetes.io/ingress.class':
                'alb',
                'alb.ingress.kubernetes.io/group.name':
                'dev',
                'alb.ingress.kubernetes.io/group.order':
                '7',
                'alb.ingress.kubernetes.io/healthcheck-path':
                '/api/status',
                'alb.ingress.kubernetes.io/backend-protocol':
                'HTTP',
                'alb.ingress.kubernetes.io/listen-ports':
                '[{"HTTPS":443}]',
                'alb.ingress.kubernetes.io/certificate-arn':
                'arn:aws:acm:ap-northeast-2:123456789012:certificate/aaaa-bbbb-cccc-xxxx'
            },
                                    labels=app_label,
                                    name=app_name),
            spec=k8s.IngressSpec(rules=[
                k8s.IngressRule(
                    host="kibana.cloudopz.co",
                    http=k8s.HttpIngressRuleValue(paths=[
                        k8s.HttpIngressPath(backend=k8s.IngressBackend(
                            service_name='kibana',
                            service_port=k8s.IntOrString.from_number(5601)))
                    ]))
            ]))
예제 #2
0
    def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)

        label = {"app": "hello-k8s"}

        k8s.Service(self,
                    'service',
                    spec=k8s.ServiceSpec(
                        type='LoadBalancer',
                        ports=[
                            k8s.ServicePort(
                                port=80,
                                target_port=k8s.IntOrString.from_number(8080))
                        ],
                        selector=label))

        k8s.Deployment(
            self,
            'deployment',
            spec=k8s.DeploymentSpec(
                replicas=2,
                selector=k8s.LabelSelector(match_labels=label),
                template=k8s.PodTemplateSpec(
                    metadata=k8s.ObjectMeta(labels=label),
                    spec=k8s.PodSpec(containers=[
                        k8s.Container(
                            name='hello-kubernetes',
                            image='paulbouwer/hello-kubernetes:1.7',
                            ports=[k8s.ContainerPort(container_port=8080)])
                    ]))))
예제 #3
0
    def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)

        label = {"app": "guestbook-ui"}

        k8s.Service(self,
                    'service',
                    spec=k8s.ServiceSpec(
                        type='LoadBalancer',
                        ports=[
                            k8s.ServicePort(
                                port=80,
                                target_port=k8s.IntOrString.from_number(80))
                        ],
                        selector=label))

        k8s.Deployment(
            self,
            'deployment',
            spec=k8s.DeploymentSpec(
                replicas=1,
                selector=k8s.LabelSelector(match_labels=label),
                template=k8s.PodTemplateSpec(
                    metadata=k8s.ObjectMeta(labels=label),
                    spec=k8s.PodSpec(containers=[
                        k8s.Container(
                            name='guestbook-ui',
                            image='gcr.io/heptio-images/ks-guestbook-demo:0.2',
                            ports=[k8s.ContainerPort(container_port=80)])
                    ]))))
예제 #4
0
    def __init__(self, scope: Construct, ns: str, *,
                 image: str,
                 replicas: typing.Optional[int] = 1,
                 port: typing.Optional[int] = 80,
                 container_port: typing.Optional[int] = 8000):
        super().__init__(scope, ns)

        label = {'app': Node.of(self).unique_id}

        k8s.Service(self, 'service',
                    spec=k8s.ServiceSpec(
                        type='NodePort',
                        ports=[k8s.ServicePort(port=port, target_port=k8s.IntOrString.from_number(container_port))],
                        selector=label))

        k8s.Deployment(self, 'deployment',
                       spec=k8s.DeploymentSpec(
                           replicas=replicas,
                           selector=k8s.LabelSelector(match_labels=label),
                           template=k8s.PodTemplateSpec(
                               metadata=k8s.ObjectMeta(labels=label),
                               spec=k8s.PodSpec(
                                   containers=[
                                       k8s.Container(
                                           name='app',
                                           image=image,
                                            ports=[k8s.ContainerPort(container_port=container_port)])]))))
예제 #5
0
  def render_k8s_resource(self, chart: Chart) -> Deployment:

    # Create the metadata and label selectors for the deployment
    object_meta = k8s.ObjectMeta(labels=self.labels)
    label_selector = k8s.LabelSelector(match_labels=self.match_labels)

    # Generate the podspec templates for the deployment
    podspec = k8s.PodSpec(init_containers=self.init_containers.render(chart),
                          image_pull_secrets=self.image_pull_secrets,
                          containers=self.containers.render(chart),
                          volumes=self.volumes.render(chart))

    podspec_template = k8s.PodTemplateSpec(metadata=object_meta,
                                           spec=podspec)

    # Use the podspec to create the deployment spec before finally returning the completed K8s Deployment.
    deployment_spec = k8s.DeploymentSpec(replicas=self.replicas, selector=label_selector, template=podspec_template)
    k8s.Deployment(chart, 'deployment', metadata=k8s.ObjectMeta(name=self.name), spec=deployment_spec)
    return self
예제 #6
0
 def render_k8s_resource(self, chart: Chart) -> k8s.Service:
     service_ports = ServicePort.render_port_list(self.ports)
     svc_spec = k8s.ServiceSpec(type=self.service_type.k8s_name(),
                                ports=service_ports,
                                selector=self.selector)
     object_meta = k8s.ObjectMeta(name=self.name, labels=self.labels)
     return k8s.Service(scope=chart,
                        name=self.name,
                        metadata=object_meta,
                        spec=svc_spec)
예제 #7
0
 def __init__(self, scope: Construct, id: str):
     super().__init__(scope, id, namespace='dev')
     k8s.KubeServiceAccount(
         self,
         "ServiceAccount",
         metadata=k8s.ObjectMeta(
             name='eks-sa',
             annotations={
                 'eks.amazonaws.com/role-arn':
                 'arn:aws:iam::123456789012:role/eks-oic-dev-sa'
             }))
예제 #8
0
    def __init__(self, scope: Construct, id: str):
        super().__init__(scope, id, namespace='dev')

        app_name = 'aws-test-sa-default'
        app_label = {'app': app_name}
        k8s.KubeDeployment(
            self,
            f"Aws-TestDeployment-SA-Default",
            metadata=k8s.ObjectMeta(labels=app_label, name=app_name),
            spec=k8s.DeploymentSpec(
                replicas=1,
                selector=k8s.LabelSelector(match_labels=app_label),
                template=k8s.PodTemplateSpec(
                    metadata=k8s.ObjectMeta(labels=app_label),
                    spec=k8s.PodSpec(containers=[
                        k8s.Container(name=app_name,
                                      image="mikesir87/aws-cli:v1",
                                      command=["sleep 60"])
                    ]))))

        app_name = 'aws-test-iam-sa'
        app_label = {'app': app_name}
        k8s.KubeDeployment(
            self,
            f"Aws-TestDeployment-IAM-SA",
            metadata=k8s.ObjectMeta(labels=app_label, name=app_name),
            spec=k8s.DeploymentSpec(
                replicas=1,
                selector=k8s.LabelSelector(match_labels=app_label),
                template=k8s.PodTemplateSpec(
                    metadata=k8s.ObjectMeta(labels=app_label),
                    spec=k8s.PodSpec(service_account_name='sel-eks-sa',
                                     containers=[
                                         k8s.Container(
                                             name=app_name,
                                             image="mikesir87/aws-cli:v1",
                                             command=["sleep 60"])
                                     ]))))
예제 #9
0
    def __init__(self,
                 scope: Construct,
                 ns: str,
                 *,
                 image: str,
                 replicas: int = 1,
                 port: int = 80,
                 container_port: int = 8080):
        super().__init__(scope, ns)

        label = {"app": Node.of(self).unique_id}

        k8s.Service(
            self,
            "service",
            spec=k8s.ServiceSpec(
                type="LoadBalancer",
                ports=[
                    k8s.ServicePort(
                        port=port,
                        target_port=k8s.IntOrString.from_number(
                            container_port),
                    )
                ],
                selector=label,
            ),
        )

        k8s.Deployment(
            self,
            "deployment",
            spec=k8s.DeploymentSpec(
                replicas=replicas,
                selector=k8s.LabelSelector(match_labels=label),
                template=k8s.PodTemplateSpec(
                    metadata=k8s.ObjectMeta(labels=label),
                    spec=k8s.PodSpec(containers=[
                        k8s.Container(
                            name="app",
                            image=image,
                            ports=[
                                k8s.ContainerPort(
                                    container_port=container_port)
                            ],
                        )
                    ]),
                ),
            ),
        )
예제 #10
0
    def __init__(self, scope: Construct, ns: str):
        super().__init__(scope, ns)

        labels = {"app": "cdk8s-python"}

        k8s.Service(
            self,
            'service',
            spec=k8s.ServiceSpec(
                type='LoadBalancer',
                ports=[
                    k8s.ServicePort(
                        port=80,
                        target_port=k8s.IntOrString.from_number(80)
                    ),
                ],
                selector=labels,
            ),
        )

        k8s.Deployment(
            self,
            'deployment',
            spec=k8s.DeploymentSpec(
                replicas=2,
                selector=k8s.LabelSelector(match_labels=labels),
                template=k8s.PodTemplateSpec(
                    metadata=k8s.ObjectMeta(labels=labels),
                    spec=k8s.PodSpec(
                        containers=[
                            k8s.Container(
                                name=ns,
                                image='nginxdemos/hello',
                                ports=[
                                    k8s.ContainerPort(container_port=80),
                                ],
                            ),
                        ],
                    ),
                ),
            ),
        )
예제 #11
0
    def __init__(self, scope: Construct, id: str, name_space):
        super().__init__(scope, id)

        app_name = 'frontend'
        app_label = {'dev': app_name}
        k8s.KubeIngressV1Beta1(
            self, 'FrontendIngress',
            metadata=k8s.ObjectMeta(
                annotations={
                    'kubernetes.io/ingress.class': 'alb',
                    'alb.ingress.kubernetes.io/group.name': f'{name_space}',
                    'alb.ingress.kubernetes.io/group.order': '100',
                    'alb.ingress.kubernetes.io/healthcheck-path': '/frontend/health-check.do',
                    'alb.ingress.kubernetes.io/actions.frontend-condition': '{"Type":"forward","ForwardConfig":{"TargetGroups":[{"ServiceName":"frontend","ServicePort":"2087","Weight":100}]}}',
                    'alb.ingress.kubernetes.io/conditions.frontend-condition': '[{"field":"path-pattern","pathPatternConfig":{"values":["/frontend/*"]}}]',
                    'alb.ingress.kubernetes.io/backend-protocol': 'HTTP',
                    'alb.ingress.kubernetes.io/listen-ports': '[{"HTTPS":443}]',
                    'alb.ingress.kubernetes.io/certificate-arn':
                        'arn:aws:acm:ap-northeast-2:123456789012:certificate/aaaa-bbbb-cccc-xxxx'
                },
                labels=app_label,
                name=app_name
            ),
            spec=k8s.IngressSpec(
                rules=[
                    k8s.IngressRule(
                        http=k8s.HttpIngressRuleValue(
                            paths=[
                                k8s.HttpIngressPath(
                                    backend=k8s.IngressBackend(
                                        service_name='frontend-condition',
                                        service_port=k8s.IntOrString.from_string('use-annotation')
                                    )
                                )
                            ]
                        )
                    )
                ]
            )
        )
예제 #12
0
 def __init__(self, scope: Construct, id: str, name_space):
     super().__init__(scope, id, namespace=name_space)
     """ Create default rule and redirect HTTP to HTTPS """
     app_name = 'dev-alb'
     app_label = {'dev': app_name}
     k8s.KubeIngressV1Beta1(
         self,
         'AppIngress',
         metadata=k8s.ObjectMeta(annotations={
             'kubernetes.io/ingress.class':
             'alb',
             'alb.ingress.kubernetes.io/scheme':
             'internet-facing',
             'alb.ingress.kubernetes.io/target-type':
             'instance',
             'alb.ingress.kubernetes.io/group.name':
             f"{name_space}",
             'alb.ingress.kubernetes.io/ip-address-type':
             'ipv4',
             'alb.ingress.kubernetes.io/backend-protocol':
             'HTTP',
             'alb.ingress.kubernetes.io/backend-protocol-version':
             'HTTP2',
             'alb.ingress.kubernetes.io/listen-ports':
             '[{"HTTPS":443}, {"HTTP":80}]',
             'alb.ingress.kubernetes.io/actions.ssl-redirect':
             '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}',
             'alb.ingress.kubernetes.io/certificate-arn':
             'arn:aws:acm:ap-northeast-2:123456789012:certificate/aaaa-bbbb-cccc-xxxx'
         },
                                 labels=app_label,
                                 name=app_name),
         spec=k8s.IngressSpec(rules=[
             k8s.IngressRule(http=k8s.HttpIngressRuleValue(paths=[
                 k8s.HttpIngressPath(backend=k8s.IngressBackend(
                     service_name='ssl-redirect',
                     service_port=k8s.IntOrString.from_string(
                         'use-annotation')))
             ]))
         ]))
예제 #13
0
 def __init__(self, scope: Construct, id: str):
     super().__init__(scope, id)
     k8s.KubeNamespace(self,
                       "NameSpace",
                       metadata=k8s.ObjectMeta(name='dev'))
예제 #14
0
 def __create_object_meta(self):
     return k8s.ObjectMeta(name=self.name,
                           labels=self.labels,
                           annotations=self.annotations)