Ultimi Post

Zero to Kubernetes on Azure

Introduction

Kubernetes is a highly popular container management platform. If you have just heard about it but didn’t have a chance to play with it then this post might help you to get started.

In this guide, we will create a single-node kubernetes cluster and will deploy a sample application into our cluster from our private container registry, and finally, we are going to configure our cluster to be able to serve our content with TLS certificate from a custom domain!

If this sounds interesting, then buckle up because this post is going to be really looooong post!

Prerequisites

Before we start, make sure that you have an active Visual Studio Subscription.

While we are creating and configuring a cluster we will make use of a couple of tools.

  • Docker
    We will need a local docker installation to be able to build Docker images locally.
  • Azure CLI is a suite of command-line tools that we are going to use heavily to manage our Azure resources.
    Once you have installed it, make sure you are logged in (az login) and your Visual Studio subscription is the active one.
  • kubectl is a command-line tool that we will use to manage our kubernetes cluster.
  • helm is a command-line tool that we will use to manage deployments to our kubernetes cluster.

Create the Kubernetes Cluster

OK, let’s get started.

First, we need to create a resource group which will contain all the resources that we are going to create later on.

Z: >az group create -n kube-demo-group --location=westus2
{
  "id": "/subscriptions//resourceGroups/kube-demo-group",
  "location": "westus2",
  "managedBy": null,
  "name": "kube-demo-group",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": null
}

Next, we are going to create a single-node kubernetes cluster.

NOTE: I have chosen to create a single-node cluster purely because the cost of a multi-node cluster would exceed monthly Visual Studio Subscription credit. If you are not planning to run the cluster for a month then feel free to increase the node count in the previous command.

az aks create -n kube-demo --resource-group kube-demo-group --node-count 1 --node-vm-size Standard_B2ms

Creating a kubernetes cluster might easily take a while. You should see a JSON formatted cluster information printed to the console when the operation is completed.

{
  "aadProfile":  null,
  "addonProfiles":  null,
  "agentPoolProfiles":  [
    {
      "count": 1,
      "maxPods": 110,
      "name": "nodepool1",
      "osDiskSizeGb": 100,
      "osType": "Linux",
      "storageProfile": "ManagedDisks",
      "vmSize": "Standard_B2ms",
      "vnetSubnetId": null
    }
  ],
  "dnsPrefix":  "kube-demo-kube-demo-group-b86a0f",
  "enableRbac":  true,
  "fqdn":  "kube-demo-kube-demo-group-b86a0f-5107b82b.hcp.westus2.azmk8s.io",
  "id":  "/subscriptions/[redacted]/resourcegroups/kube-demo-group/providers/Microsoft.ContainerService/managedClusters/kube-demo",
  "kubernetesVersion":  "1.11.9",
  "linuxProfile":  {
    "adminUsername":  "azureuser",
    "ssh":  {
      "publicKeys":  [redacted]
    }
  },
  "location":  "westus2",
  "name":  "kube-demo",
  "networkProfile":  {
    "dnsServiceIp":  "10.0.0.10",
    "dockerBridgeCidr":  "172.17.0.1/16",
    "networkPlugin":  "kubenet",
    "networkPolicy":  null,
    "podCidr":  "10.244.0.0/16",
    "serviceCidr":  "10.0.0.0/16"
  },
  "nodeResourceGroup":  "MC_kube-demo-group_kube-demo_westus2",
  "provisioningState":  "Succeeded",
  "resourceGroup":  "kube-demo-group",
  "servicePrincipalProfile":  { clientId:   },
  "tags":  null,
  "type":  "Microsoft.ContainerService/ManagedClusters"
}

NOTE: If you see an error message saying An RSA key file or key value must be supplied to SSH Key Value. You can use –generate-ssh-keys to let CLI generate one for you, then try appending --generate-ssh-keys option to the end of the previous command and run it again.

From now on, we are going to use kubectl CLI to interact with our cluster. kubectl can be used to work with multiple kubernetes cluster. Authentication information for each cluster is called context.

We need to provide context information of our cluster so that the commands we run points to our cluster.

We are going to use Azure CLI to handle pulling the context information of cluster and merge it with kubectl configuration.

Z: >az aks get-credentials -g kube-demo-group -n kube-demo
Merged "kube-demo" as current context in C: UsersIbrahim.Dursun.kubeconfig

Context information for our cluster is called kube-demo. Let’s make sure that it is the default context.

Z: >kubectl config use-context kube-demo
Switched to context "kube-demo".

Awesome! Now, every command we are going to run using kubectl is going to be executed in our kubernetes cluster.

Let’s request the list of active nodes in our cluster.

Z:>kubectl get nodes
NAME                       STATUS   ROLES   AGE   VERSION
aks-nodepool1-27011079-0   Ready    agent   12m   v1.11.9

Create an Azure Container Registry (ACR)

We have created a kubernetes cluster, but it is pretty useless as it’s own because we haven’t deployed anything to it.

Ideally, we would like to deploy containers from our own application images into our cluster.

One way of doing it is to push our application’s docker image to public hub.docker.com under our user name but this will make it publicly accessible. If this is not something you would like the alternative is to create a private container registry.

A private container registry on Azure is called Azure Container Registry (ACR).

The following command creates an ACR resource with name kubeDockerRegistry on Azure. The full address of the container registry will be kubedockerregistry.azurecr.io.

NOTE: The name of the ACR needs to be unique. If the name is taken, an error message will be printed. Don’t forget to replace ACR name in the subsequent commands with the name you have chosen.

Z: >az acr create --resource-group kube-demo-group --name kubeDockerRegistry --sku Basic
{
  "adminUserEnabled": false,
  "id": "/subscriptions//resourceGroups/kube-demo-group/providers/Microsoft.ContainerRegistry/registries/kubeDockerRegistry",
  "location": "westus2",
  "loginServer": "kubedockerregistry.azurecr.io",
  "name": "kubeDockerRegistry",
  "provisioningState": "Succeeded",
  "resourceGroup": "kube-demo-group",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

At this point, if we knew username and password to our ACR then we would run docker login to login to the registry. As the first line of the response suggests, the admin user is disabled by default.

We are going to use Azure CLI to handle the details of logging in to our container registry through docker.

Z: >az acr login --name kubeDockerRegistry
Login Succeeded

We are going to use aks-helloworld image to test deployments to our kubernetes cluster.

Z: >docker pull neilpeterson/aks-helloworld:v1
...snip...
Status: Downloaded newer image for neilpeterson/aks-helloworld:v1

Docker image naming format is registry[:port]/user/repo[:tag]. When registry part not specified then it is assumed to be hub.docker.com. If we want to push an image to our private container registry then we need to tag the image accordingly. In our case the name should be kubedockerregistry.azurecr.io/aks-helloworld:latest.

Z: >docker tag neilpeterson/aks-helloworld:v1 kubedockerregistry.azurecr.io/aks-helloworld:latest

Now, when we push the image, it will be sent to our private container registry.

Z: >docker push kubedockerregistry.azurecr.io/aks-helloworld:latest
The push refers to repository [kubedockerregistry.azurecr.io/aks-helloworld]
752a9476c0fe: Pushed
1f6a42f2e735: Pushed
fc5f084dd381: Pushed
...snip..
851f3e348c69: Pushed
e27a10675c56: Pushed
latest: digest: sha256:fb47732ef36b285b1f3fbda69ab8411a430b1dc43823ae33d5992f0295c945f4 size: 6169

Associate Azure Container Registry and Kubernetes Cluster

We have set up our kubernetes cluster and a private container registry and be able to communicate with both of them.

Next step is to make them be able to talk with each other.

We need to grant acrpull permission to our kubernetes cluster service principal to be able to pull docker images from our private container registry.

In order to do this, we need two pieces of information.

First, we need to get the server principal id of the cluster which we will be referring to as SERVER_PRINCIPAL_ID.

Z: >az aks show --resource-group kube-demo-group --name kube-demo --query "servicePrincipalProfile.clientId" --output=tsv
9646e977-98de-4217-beb3-28ec3d043290

Secondly, we need resource id of the private container registry which we will be referring to as ACR_RESOURCE_ID.

Z: >az acr show --name kubeDockerRegistry --resource-group kube-demo-group --query "id" --output=tsv
/subscriptions//resourceGroups/kube-demo-group/providers/Microsoft.ContainerRegistry/registries/kubeDockerRegistry

Finally, we are going to grant the acrpull permission to SERVER_PRINCIPLE_ID on ACR_RESOURCE_ID.

Z: >az role assignment create --role acrpull --assignee  --scope 
{
  "canDelegate": null,
  "id": "/subscriptions//resourceGroups/kube-demo-group/providers/Microsoft.ContainerRegistry/registries/kubeDockerRegistry/providers/Microsoft.Authorization/roleAssignments/",
  "name": "",
  "principalId": "",
  "resourceGroup": "kube-demo-group",
  "roleDefinitionId": "/subscriptions//providers/Microsoft.Authorization/roleDefinitions/",
  "scope": "/subscriptions//resourceGroups/kube-demo-group/providers/Microsoft.ContainerRegistry/registries/kubeDockerRegistry",
  "type": "Microsoft.Authorization/roleAssignments"
}

Install Helm

Helm is the package manager for Kubernetes.

We are going to use it to deploy our applications into our cluster.

Helm has a server-side component called tiller which needs to be initialised in the cluster to be able to create resources needed for deployment of our application.

Let’s do that first.

Z: >helm init --history-max 200
$HELM_HOME has been configured at Z: .helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

If we run helm list now, we will get an error message because helm is running with the default service account. That means it doesn’t have the required permissions to make any changes to our cluster.

Z: >helm list
Error: configmaps is forbidden: User "system:serviceaccount:kube-system:default" cannot list configmaps in the namespace "kube-system"

We need to grant the required permissions to be able to install packages into our cluster.

NOTE: This is giving cluster-admin access to the tiller service, which is not something you should be doing in production.

> Z: >kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
> clusterrolebinding.rbac.authorization.k8s.io/add-on-cluster-admin created
> ```

If we run `helm list` again, the error message should not show and we should be able to see the tiller pod running.

```sh
Z: >kubectl get pods -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
heapster-5d6f9b846c-t4n4h               2/2     Running   0          1h
kube-dns-autoscaler-746998ccf6-kc5hp    1/1     Running   0          1h
kube-dns-v20-7c7d7d4c66-n8tnd           4/4     Running   0          1h
kube-dns-v20-7c7d7d4c66-tk6pt           4/4     Running   0          1h
kube-proxy-vblvr                        1/1     Running   0          1h
kube-svc-redirect-dz7tp                 2/2     Running   0          1h
kubernetes-dashboard-67bdc65878-vwb67   1/1     Running   0          1h
metrics-server-5cbc77f79f-hhxxp         1/1     Running   0          1h
tiller-deploy-f8dd488b7-ls5j4           1/1     Running   0          53m
tunnelfront-66cd6b6875-29vvv            1/1     Running   0          1h

Deploy with helm

In Helm’s terminology a recipe for a deployment is called a chart. A chart made of a collection of templates and a file called Values.yaml to provide the template values.

We are going to create a chart for our aks-helloworld application.

Z: >helm create aks-helloworld-chart
Creating aks-helloworld-chart

Helm is going to create a folder with name aks-helloworld-chart. The file that we are interested is values.yaml.

The contents of the file look like this:

# Default values for simple-server.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount:  1

image: 
  repository:  nginx
  tag:  stable
  pullPolicy:  IfNotPresent

nameOverride:  ""
fullnameOverride:  ""

service: 
  type:  ClusterIP
  port:  80

ingress: 
  enabled:  false
  annotations: 
    {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts: 
    - host:  chart-example.local
      paths:  []

  tls:  []
  #  - secretName: chart-example-tls
  #    hosts: 
  #      - chart-example.local

resources: 
  {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  # limits: 
  #   cpu: 100m
  #   memory: 128Mi
  # requests: 
  #   cpu: 100m
  #   memory: 128Mi

nodeSelector:  {}

tolerations:  []

affinity:  {}

We are going to change the values under the image block. These values define which and what version of the docker image to pull.

For our application;

  • image.repository is kubedockerregistry.azurecr.io/aks-helloworld
  • image.tag is latest.

We are not interested in ingress and tls blocks for now, but we are going to use them later.

Once we have updated these values, we can try deploying our application.

Z: >helm install -n aks-helloworld aks-helloworld-chart
NAME:   aks-helloworld
LAST DEPLOYED: Mon Apr 15 14: 31: 22 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME                                 READY  UP-TO-DATE  AVAILABLE  AGE
aks-helloworld-aks-helloworld-chart  0/1    1           0          1s

==> v1/Pod(related)
NAME                                                  READY  STATUS             RESTARTS  AGE
aks-helloworld-aks-helloworld-chart-599d9658f6-4gvjt  0/1    ContainerCreating  0         1s

==> v1/Service
NAME                                 TYPE       CLUSTER-IP   EXTERNAL-IP  PORT(S)  AGE
aks-helloworld-aks-helloworld-chart  ClusterIP  10.0.242.36         80/TCP   1s


NOTES:
1. Get the application URL by running these commands:
  export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=aks-helloworld-chart,app.kubernetes.io/instance=aks-helloworld" -o jsonpath="{.items[0].metadata.name}")
  echo "Visit http://127.0.0.1: 8080 to use your application"
  kubectl port-forward $POD_NAME 8080: 80

The installation has kicked off. You can watch the progress of the deployment by running the following command.

Z: >kubectl get deployments --watch
NAME                                           READY   UP-TO-DATE   AVAILABLE   AGE
aks-helloworld-aks-helloworld-chart            0/1     1            0           96s
aks-helloworld-aks-helloworld-chart            1/1     1            1          100s

As a result of the deployment of our application, the following resources created in the kubernetes cluster:

  • Pods are a group of one or more containers running inside the cluster.
  • Services define a well known name and a port for a set of pods inside our cluster. You might be running your application in multiple pods, but then in order to connecto to these pods you need to know IPs and ports assigned to them. Instead of connecting pods individually, you can use services.
  • Deployments are used to declare what resources you want to run inside your cluster and kubernetes handles the creating and updating the necessary resources. If a pod dies, it spins up another one. If deployment is deleted then all the associated resources are deleted.

Install nginx ingress

Right now, we have pods and services running within the cluster. But, they are not accesible outside of the cluster.

The resource that allows external requests to map into the services within the cluster is called ingress.

We need to create an ingress resource to tell kubernetes how the requests should be mapped.

Luckily, there is a premade chart that we can just install and enable ingress.

Z: >helm install stable/nginx-ingress
NAME:   kneeling-coral
LAST DEPLOYED: Fri Apr 12 13: 29: 54 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME                                     DATA  AGE
kneeling-coral-nginx-ingress-controller  1     2s

==> v1/Pod(related)
NAME                                                           READY  STATUS             RESTARTS  AGE
kneeling-coral-nginx-ingress-controller-f66ddfd74-z6cgx        0/1    ContainerCreating  0         1s
kneeling-coral-nginx-ingress-default-backend-845d46bc44-jqzl4  0/1    ContainerCreating  0         1s

==> v1/Service
NAME                                          TYPE          CLUSTER-IP    EXTERNAL-IP  PORT(S)                     AGE
kneeling-coral-nginx-ingress-controller       LoadBalancer  10.0.218.217      80: 30833/TCP,443: 31062/TCP  2s
kneeling-coral-nginx-ingress-default-backend  ClusterIP     10.0.187.231         80/TCP                      2s

==> v1/ServiceAccount
NAME                          SECRETS  AGE
kneeling-coral-nginx-ingress  1        2s

==> v1beta1/ClusterRole
NAME                          AGE
kneeling-coral-nginx-ingress  2s

==> v1beta1/ClusterRoleBinding
NAME                          AGE
kneeling-coral-nginx-ingress  2s

==> v1beta1/Deployment
NAME                                          READY  UP-TO-DATE  AVAILABLE  AGE
kneeling-coral-nginx-ingress-controller       0/1    1           0          2s
kneeling-coral-nginx-ingress-default-backend  0/1    1           0          2s

==> v1beta1/Role
NAME                          AGE
kneeling-coral-nginx-ingress  2s

==> v1beta1/RoleBinding
NAME                          AGE
kneeling-coral-nginx-ingress  2s


NOTES:
The nginx-ingress controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w kneeling-coral-nginx-ingress-controller'

An example Ingress that makes use of the controller:

  apiVersion: extensions/v1beta1
  kind: Ingress
  metadata:
    annotations:
      kubernetes.io/ingress.class: nginx
    name: example
    namespace: foo
  spec:
    rules:
      - host: www.example.com
        http:
          paths:
            - backend:
                serviceName: exampleService
                servicePort: 80
              path: /
    # This section is only required if TLS is to be enabled for the Ingress
    tls:
        - hosts:
            - www.example.com
          secretName: example-tls

If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
    tls.crt: 
    tls.key: 
  type: kubernetes.io/tls

Helm deployed all the ingress related resources. If we query the running services, we should see an ingress-controller with an external IP assigned.

Z: >kubectl get svc
NAME                                           TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
aks-helloworld-aks-helloworld-chart            ClusterIP      10.0.242.36              80/TCP                       1d
kneeling-coral-nginx-ingress-controller        LoadBalancer   10.0.218.217   13.77.160.221   80: 30833/TCP,443: 31062/TCP   1d
kneeling-coral-nginx-ingress-default-backend   ClusterIP      10.0.187.231             80/TCP                       1d
kubernetes                                     ClusterIP      10.0.0.1                 443/TCP                      1d

13.77.160.221 is the IP that we can use to connect to our cluster now.

Let’s see what we get back when we make a request!

Z: >curl 13.77.160.221
default backend - 404

NOTE: You can install curl if you don’t have it locally install by running scoop install curl

The response is default backend - 404 which is absolutely normal.

It means ingress is up and running but it doesn’t know how to map external requests to any of the internal services, therefore, falling back to the default backend which only returns 404.

We are going to modify ingress block on our chart as follows:

ingress: 
  enabled:  true
  annotations: 
    kubernetes.io/ingress.class:  nginx
    # kubernetes.io/tls-acme: "true"
  hosts: 
    - paths: 
        - /

We have enabled the ingress, which will tell helm to create an ingress resource which maps the root of our host to the internal aks-helloworld service.

It’s worth bumping up the version of the chart in Chart.yaml so that we can rollback if anything goes wrong.

Let’s deploy the new version.

Z: >helm upgrade aks-helloworld aks-helloworld-chart
Release "aks-helloworld" has been upgraded. Happy Helming!
LAST DEPLOYED: Mon Apr 15 14: 51: 19 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME                                 READY  UP-TO-DATE  AVAILABLE  AGE
aks-helloworld-aks-helloworld-chart  1/1    1           1          19m

==> v1/Pod(related)
NAME                                                  READY  STATUS   RESTARTS  AGE
aks-helloworld-aks-helloworld-chart-599d9658f6-4gvjt  1/1    Running  0         19m

==> v1/Service
NAME                                 TYPE       CLUSTER-IP   EXTERNAL-IP  PORT(S)  AGE
aks-helloworld-aks-helloworld-chart  ClusterIP  10.0.242.36         80/TCP   19m

==> v1beta1/Ingress
NAME                                 HOSTS  ADDRESS  PORTS  AGE
aks-helloworld-aks-helloworld-chart  *      80       1s


NOTES:
1. Get the application URL by running these commands:
  http:///

Let’s test if the server is returning anything!

Z: >curl -k https://13.77.160.221/

xmlns="http://www.w3.org/1999/xhtml">

    rel="stylesheet" type="text/css" href="/static/default.css">
    Welcome to Azure Container Service <span>(</span>AKS<span>)</span>  

    
id="container">
id="form" name="form" action="/"" method="post">
Welcome to Azure Container Service (AKS)
/static/acs.png" als="acs logo">

Create a DNS Zone

Accessing the cluster only by the IP is not ideal.

I want to get to the cluster by using a domain name. I am going to configure one of my custom domains to access the cluster.

First, we need to create a DNS Zone resource for our domain.

Z: >az network dns zone create --resource-group=kube-demo-group -n idursun.dev
{
  "etag": "00000002-0000-0000-7f3b-15e695f3d401",
  "id": "/subscriptions//resourceGroups/kube-demo-group/providers/Microsoft.Network/dnszones/idursun.dev",
  "location": "global",
  "maxNumberOfRecordSets": 5000,
  "name": "idursun.dev",
  "nameServers": [
    "ns1-07.azure-dns.com.",
    "ns2-07.azure-dns.net.",
    "ns3-07.azure-dns.org.",
    "ns4-07.azure-dns.info."
  ],
  "numberOfRecordSets": 2,
  "registrationVirtualNetworks": null,
  "resolutionVirtualNetworks": null,
  "resourceGroup": "kube-demo-group",
  "tags": {},
  "type": "Microsoft.Network/dnszones",
  "zoneType": "Public"
}

We are interested in the name server values that are printed as a part of the JSON response. I am going to enter these values to my domain registrar’s portal so that the domain resolves into our DNS Zone.

In my registrar’s portal, it looks like this:


NOTE: Don’t forget to include trailing dots.

DNS propagation may take many hours to complete.

You can run use nslookup to check if the operation is completed. The name of the primary name server should change to ns1-07.azure-dns.com.

Z: >nslookup -type=SOA idursun.dev
...snip...
idursun.dev
        primary name server = ns1-07.azure-dns.com
...snip...

When a user types the domain into their browser, they will be taken to the Azure DNS Zonec, but Azure doesn’t know what IP to redirect to. We need to add an A-type record-set in our DNS Zone to point our domain to the cluster’s external IP.

Z: >az network dns record-set a add-record --resource-group=kube-demo-group -z idursun.dev -n @ -a 13.77.160.221
{
  "arecords": [
    {
      "ipv4Address": "13.77.160.221"
    }
  ],
  "etag": "5b0a3609-ab6b-4ca2-bb62-c86e978757f7",
  "fqdn": "idursun.dev.",
  "id": "/subscriptions//resourceGroups/kube-demo-group/providers/Microsoft.Network/dnszones/idursun.dev/A/@",
  "metadata": null,
  "name": "@",
  "provisioningState": "Succeeded",
  "resourceGroup": "kube-demo-group",
  "targetResource": {
    "id": null
  },
  "ttl": 3600,
  "type": "Microsoft.Network/dnszones/A"
}

Let’s update our aks-helloworld-chart by adding our host value.

ingress: 
  enabled:  true
  annotations: 
    kubernetes.io/ingress.class:  nginx
    # kubernetes.io/tls-acme: "true"
  hosts: 
    - host:  idursun.dev
      paths: 
        - /

I have added a host value to point to our custom domain.

Let’s bump the chart version and deploy again.

Z: >helm upgrade aks-helloworld aks-helloworld-chart
Release "aks-helloworld" has been upgraded. Happy Helming!
LAST DEPLOYED: Mon Apr 15 16: 26: 22 2019
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME                                 READY  UP-TO-DATE  AVAILABLE  AGE
aks-helloworld-aks-helloworld-chart  1/1    1           1          115m

==> v1/Pod(related)
NAME                                                  READY  STATUS   RESTARTS  AGE
aks-helloworld-aks-helloworld-chart-599d9658f6-4gvjt  1/1    Running  0         115m

==> v1/Service
NAME                                 TYPE       CLUSTER-IP   EXTERNAL-IP  PORT(S)  AGE
aks-helloworld-aks-helloworld-chart  ClusterIP  10.0.242.36         80/TCP   115m

==> v1beta1/Ingress
NAME                                 HOSTS        ADDRESS  PORTS  AGE
aks-helloworld-aks-helloworld-chart  idursun.com  80       95m


NOTES:
1. Get the application URL by running these commands:
  http://idursun.dev/

We should be able to navigate to our cluster by using the domain.

curl -L http://idursun.dev/

If you try to reach the website from a browser, you will be redirected to https because of the default HSTS policy. Majority of the browsers will refuse to load the website because it doesn’t have a browser-trusted certificate.

Let’s fix this!

TLS Certificate

I am going to use letsencrypt.org to obtain a TLS certificate.

Let’s Encrypt is a well-known, non-profit certificate authority. Certificates issued by ‘let’s encrypt’ are valid for 3 months and needs to be renewed afterwards. Renewal of the certificate can be done manually or can be automated by running an ACME client.

Luckily, there is an add-on called cert-manager for kubernetes which can automate the whole process for us. We are going to install it next but before we do that there is one more thing we need to do.

We need to add CAA record-set to our DNS zone to make it clear that our certificate issuer is letsencrypt.org. This record is checked as a part of baseline requirements by many CAs as they are required to do to be trusted by major browsers.

Z: >az network dns record-set caa add-record -g kube-demo-group -z idursun.dev -n @ --flags 0 --tag "issue" --value "letsencrypt.org"
{
  "caaRecords": [
    {
      "flags": 0,
      "tag": "issue",
      "value": "letsencrypt.org"
    }
  ],
  "etag": "26a7e752-aac4-4816-87dd-ee7a8dc3e718",
  "fqdn": "idursun.dev.",
  "id": "/subscriptions//resourceGroups/kube-demo-group/providers/Microsoft.Network/dnszones/idursun.dev/CAA/@",
  "metadata": null,
  "name": "@",
  "provisioningState": "Succeeded",
  "resourceGroup": "kube-demo-group",
  "targetResource": {
    "id": null
  },
  "ttl": 3600,
  "type": "Microsoft.Network/dnszones/CAA"
}

You can use https://caatest.co.uk/ to check if your CAA record is set up correctly.

Install cert-manager

cert-manager is an open source kubernetes add-on by jetstack that automates issuance and renewal of TLS certificates.

I have installed cert-manager:0.7 by following their installation guide.

Z: >kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.7/deploy/manifests/00-crds.yaml
customresourcedefinition.apiextensions.k8s.io/certificates.certmanager.k8s.io created
customresourcedefinition.apiextensions.k8s.io/challenges.certmanager.k8s.io created
customresourcedefinition.apiextensions.k8s.io/clusterissuers.certmanager.k8s.io created
customresourcedefinition.apiextensions.k8s.io/issuers.certmanager.k8s.io created
customresourcedefinition.apiextensions.k8s.io/orders.certmanager.k8s.io created

Z: >kubectl create namespace cert-manager
namespace/cert-manager created

Z: >kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
namespace/cert-manager labeled

Z: >helm repo add jetstack https://charts.jetstack.io
"jetstack" has been added to your repositories

Z: >helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "jetstack" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete. ⎈ Happy Helming!⎈

Z: >helm install --name cert-manager --namespace cert-manager --version v0.7.0 jetstack/cert-manager
NAME:   cert-manager
LAST DEPLOYED: Mon Apr 15 20: 52: 37 2019
NAMESPACE: cert-manager
STATUS: DEPLOYED
...snip...

Create an issuer

We have cert-manager up and running.

Next thing to do is to create an issuer resource to kick off requesting a TLS certificate from letsencrypt.

Let’s create a file with the following content and name it issuer-prod.yaml.

apiVersion:  certmanager.k8s.io/v1alpha1
kind:  Issuer
metadata: 
  name:  letsencrypt-prod
spec: 
  acme: 
    # You must replace this email address with your own.
    # Let's Encrypt will use this to contact you about expiring
    # certificates, and issues related to your account.
    email:   email here>
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef: 
      # Secret resource used to store the account's private key.
      name:  letsencrypt-prod
    # Enable the HTTP01 challenge mechanism for this Issuer
    http01:  {}

NOTE: Don’t forget to change the email.

Z: >kubectl apply -f issuer-prod.yaml
issuer.certmanager.k8s.io/letsencrypt-prod created

Now we can enable TLS in our aks-helloworld-chart chart and configure it to use the issuer that we have just created.

ingress: 
  enabled:  true
  annotations: 
    kubernetes.io/ingress.class:  nginx
    certmanager.k8s.io/issuer:  "letsencrypt-prod"
    certmanager.k8s.io/acme-challenge-type:  http01
  hosts: 
    - host:  idursun.dev
      paths: 
        - /

  tls: 
    - secretName:  cert-prod
      hosts: 
        - idursun.dev

We have added certmanager.k8s.io/issuer annotation to specify which issuer to use and also set certmanager.k8s.io/acme-challenge-type value to http01 to match the challenge type of the issuer.

cert-manager should pick the changes and should handle the communication with letsencrypt and finally create a certificate resource with the name cert-prod.

Let’s bump the chart version and upgrade our chart once more.

Z: >helm upgrade aks-helloworld aks-helloworld-chart

It might take a while to complete the request but eventually, we should see our certificate created.

Z: >kubectl get certificate
NAME
cert-prod
Z: >kubectl describe certificate/cert-prod

..snip...

Events:
  Type    Reason              Age   From          Message
  ----    ------              ----  ----          -------
  Normal  Generated           51s   cert-manager  Generated new private key
  Normal  GenerateSelfSigned  51s   cert-manager  Generated temporary self signed certificate
  Normal  OrderCreated        50s   cert-manager  Created Order resource "cert-prod-1408931963"
  Normal  OrderComplete       26s   cert-manager  Order "cert-prod-1408931963" completed successfully
  Normal  CertIssued          26s   cert-manager  Certificate issued successfully

Let’s navigate to our domain and check if the HTTPS connection is secure.


Conclusion

Phew!

That was quite a long post even though we have cut corners whenever we can.

I hope this would give an overall understanding of how various pieces of technology come together to create a kubernetes cluster that is capable of routing HTTP requests to the services inside the cluster as well as issuing a TLS certificate and keeping it up to date.

As a next step, you might create an Azure DevOps CI/CD pipeline that deploys your application straight from the git repository to the cluster.

Cheers!

Read More

Verfassungsschutz mauert beim Thema AfD

Verfassungsschutz mauert beim Thema AfD

Das Bundesamt für Verfassungsschutz (BfV) hat sich zum Thema AfD offenbar einen Maulkorb verpasst: Das Amt könne sich “nicht zu Fragen im Kontext mit einer möglichen Bearbeitung der AfD äußern”, teilte das BfV auf Tagesspiegel-Anfrage mit. Als Grund wurde der Beschluss des Kölner Verwaltungsgerichts vom Februar genannt, der dem Amt die öffentliche Einstufung der AfD als “Prüffall” untersagt Verweigert wurden damit Auskünfte über die Beobachtung von AfD-Abgeordneten in Bund und Ländern durch den Verfassungsschutz.

Auch gegenüber Anfragen von Parlamentariern gilt offenbar eine Nachrichtensperre zum AfD-Thema: Mit Rücksucht auf den Gerichtsbeschluss “äußert sich das Bundesamt für Verfassungsschutz zur Alternative für Deutschland als Gesamtpartei nicht”, heißt es in einer Antwort an den Grünen-Bundestagsabgeordneten Dieter Janecek, die dem Tagesspiegel vorliegt. Der Politiker wollte lediglich wissen, ob das BfV verfassungsfeindliche Bestrebungen der AfD “als Gesamtpartei” verfolgt oder nicht.

Das Gericht hat nichts dazu gesagt, wie mit Fragen zur AfD umzugehen ist

Nach Ansicht des Kölner Verwaltungsgerichts hatte das BfV mit seiner aus eigenem Willen heraus erfolgten Mitteilung vom “Prüffall” AfD pass away Partei in ihren grundgesetzlich geschützten Rechten verletzt, da eine solche Darstellung auf Wählerinnen und Wähler abschreckend wirken könne. Allerdings hat das Gericht keine Aussagen dazu getroffen, wie mit Antworten auf Anfragen von Parlamentariern oder der Presse umzugehen wäre, die das Thema AfD betreffen. Das BfV nimmt den Gerichtsbeschluss nunmehr offenkundig zum Anlass, Informationsbegehren pauschal abzulehnen.

Damit setzt sich das Amt und sein Präsident Thomas Haldenwang in Widerspruch zum Bundesinnenministerium von Horst Seehofer (CSU), das über das BfV pass away Aufsicht führt. Das Ministerium bezeichnet die AfD weiterhin öffentlich und ausdrücklich als einen „ Prüffall” des Verfassungsschutzes Wie berichtet, hatte zuletzt der Staatssekretär des Bundesinnenministeriums Hans-Georg Engelke (CDU) im April in einer schriftlichen Antwort auf eine parlamentarische Anfrage von einer „ weiteren Bearbeitung des Prüffalls” AfD gesprochen. Pass away AfD teilte mit, sie wolle am Montag zu ihrem weiteren Vorgehen in der Sache entscheiden. Ein erneutes gerichtliches Verfahren wurde nicht ausgeschlossen.

Das Innenministerium informiert zu Extremismus-Verdacht bei Mitarbeitern – anders als das BfV

Das Ministerium hat bei seinen Äußerungen jedoch keine juristischen Bedenken, weil es sich seiner Ansicht nach nicht um Öffentlichkeitsarbeit des BfV handele, wie sie Gegenstand des Gerichtsbeschlusses gewesen sei. Auch äußert sich das Ministerium zu Kenntnissen über die Parteinähe von eigenen Mitarbeitern. Demnach gebe es keine “zahlenmäßige Informationen zu AfD-Mitgliedschaften oder AfD-Kontakten der Beschäftigten”. In den vergangenen beiden Jahren seien auch keine Disziplinarverfahren wegen des Verdachts eingeleitet worden, dass eine Beamtin oder ein Beamter sich von dem Bekenntnis zur Verfassungstreue distanziert habe. Pass away Kölner Verfassungsschützer verweigern dagegen entsprechende Angaben zu den eigenen Amtsangehörigen.

Learn More

Atletica, Semenya pensa al ritiro: “Io sono e sarò sempre questa. Ho finito”

Atletica, Semenya pensa al ritiro: “Io sono e sarò sempre questa. Ho finito”

ROMA – Caster Semenya non vuole più lottare. A 24 ore di distanza dalla sentenza Tribunale Arbitrale dello Sport che ha respinto il ricorso dell’ atleta e della federazione sudafricana (Asa) in merito al nuovo regolamento Iaaf sugli atleti iperandrogenici che producono naturalmente alti livelli di testosterone, la campionessa olimpica degli 800 metri si lascia andare allo sconforto.

Lo sconforto sui social

Dopo aver risposto con una dichiarazione di guerra alla sentenza Tas che la obbliga a sottoporsi a una cura ormonale per poter partecipare ai Mondiali di Doha, la Semenya si è sfogata su Twitter. “Sapere quando andar through è saggio. Avere la capacità di farlo coraggioso. Farlo a testa alta dignitoso”. Messaggi che lasciano poco spazio all’ interpretazione e fanno pensare alla voglia di ritirarsi.

Sono questa, ho finito”

Ieri la due volte campionessa olimpica sudafricana aveva diffuso un comunicato nel quale aveva chiaramente espresso la sua volontà: “Non mi fermeranno”. Period poi emerso che, secondo le indicazioni Iaaf, Semenya ha sette giorni per far calare i livelli di testosterone nel suo sangue. Così oggi sono arrivati messaggi ben più negativi. E ai sostenitori che dal suo profilo twitter le chiedevano di non mollare, l’olimpionica ha risposto: “Io sono e sarò sempre questa. Ho finito”.

Iaaf applicherà regola testosterone anche nei 1500

La Iaaf ignorerà quando disposto dal Tas di Losanna in relazione al caso Semenya e applicherà la regola sul tasso di testosterone, che prevede la riduzione dei livelli per le donne che ne producono troppo, anche per la gara dei 1.500 donne. Lo ha detto il presidente della federazione internazionale di atletica, Sebastian Coe. Il Tribunale dello sport aveva regolato la vicenda dando ragione alla Iaaf sulla vicenda delle atlete iperandrogene ma stabilendo che con c’ è “evidenza conclamata” che una tale condizione possa produrre dei vantaggi anche nella gara dei1500 La Semenya, olimpionica e campionessa del mondo degli 800, avrebbe invece dovuto sottoporsi a remedy ormonali per poter continuare a gareggiare nella prova ‘regina’ del mezzofondo. Ma la Iaaf ha deciso d’ignorare tale considerazione e applicherà la regola anche nei 1500, specialità di cui in passato Coe è stato il’re’.

L’approfondimento quotidiano lo trovi su Associate: editoriali, analisi, interviste e reportage

La selezione dei migliori articoli di Repubblica da leggere e ascoltare.

Rep Saperne di più è una tua scelta

Sostieni il giornalismo!
Abbonati a Repubblica

Find Out More

In SA-Manier durch Plauen

In SA-Manier durch Plauen

Sachsens Polizei war erstaunlich gelassen nach dem martialischen Aufmarsch von Neonazis am 1. Mai in Plauen. Der polizeiliche Einsatzführer, Polizeioberrat Alexander Beitz, bilanzierte nach dem Einsatz mit insgesamt rund 1300 Beamten: “Ich freue mich, dass die Umsetzung des auf Deeskalation beruhenden polizeilichen Einsatzkonzeptes gelungen ist und dass der Blick nach Plauen ein friedliches 1. Mai-Geschehen zeigte.”

Und das nach einer Demonstration, pass away viele Beobachter an das Auftreten der Nationalsozialisten im Dritten Reich erinnerte.

Pass away neonazistische Kleinpartei “Der III. Weg” hat in der Stadt im Vogtland ihre bundesweit aktivste Parteiuntergliederung. Rund 300 ihrer Anhänger waren nach bundesweiter Mobilisierung am Mittwoch mit Fackeln durch pass away Stadt gezogen. Die meisten von ihnen traten mit braun-beigen Tee shirts wie uniformiert auf, grüne Fahnen mit dem Parteilogo wurden geschwenkt. Dabei hatten sie Trommeln, die große Ähnlichkeit mit den Instrumenten des Trommlercorps der Hitlerjugend hatten.

Skandiert wurde von Demonstranten: “Nationaler Sozialismus – jetzt!” und “Deutschland erwache”, wie das Jüdische Online forum für Demokratie und gegen Antisemitismus berichtete Ein Teilnehmer habe den Hitlergruß gezeigt und “Tod den Kanacken” in Richtung von Anwohnern geschrien. Im September 2018 war bei einer Demonstration des “III. Wegs” die Parole “Die Lösung heißt Nationalsozialismus” straffrei geblieben Diesmal meldet die Polizei zehn Ermittlungsverfahren aus Plauen, vor allem wegen Verstößen gegen das Vermummungsverbot.

Sitzblockade von Gegendemonstranten

Die Behörden in Sachsen waren auch diesmal davon überzeugt, alles richtig gemacht zu haben. Nicht nur die Polizei, pass away darauf verwies, auch eine Sitzblockade von Gegendemonstranten möglich gemacht zu haben. Sondern auch das Landratsamt des Vogtlandkreises, das als Versammlungsbehörde den Aufzug der Neonazis beauflagt hatte. Pyrotechnik war demnach zu Beginn und zum Ende des Aufmarschs gestattet. Die “Freie Presse” zitierte den Sprecher des Landratsamtes, Uwe Heinl, mit den Worten, 16 Fackeln seien erlaubt gewesen, 14 habe er gezählt.

Plauens Oberbürgermeister Ralf Oberdorfer (FDP) hatte erst kurz vor dem Aufmarsch seine Feststellung vom Februar wiederholt, wonach “Der III. Weg” nicht verboten und damit “in einer Demokratie legitimiert” sei.

Und die Uniformierung? Im sächsischen Versammlungsgesetz gibt es einen Passus, in dem es heißt: “Es ist verboten, öffentlich oder in einer Versammlung Uniformen, Uniformteile oder gleichartige Kleidungsstücke als Ausdruck einer gemeinsamen politischen Gesinnung zu tragen, wenn infolge des äußeren Erscheinungsbildes oder durch pass away Ausgestaltung der Versammlung Gewaltbereitschaft vermittelt und dadurch auf andere Versammlungsteilnehmer oder Außenstehende einschüchternd eingewirkt wird.”

2009 hatte das Sächsische Oberverwaltungsgericht ( Az.: 3 B 59/06) im Streit um die Auflagen für eine NPD-Demonstration in Grimma geurteilt, das Uniformverbot greife, wenn Kleidungsstücke “als Ausdruck einer gemeinsamen politischen Gesinnung getragen werden”. Nicht zwingend muss es sich um eine Uniform handeln. Pass away Rechtsgrundlage greife auch, wenn zivile Kleidungsstücke “im Wesentlichen einheitlich aussehen und in ihrer Außenwirkung suggestiv-militante Effekte in Richtung auf einschüchternde uniforme Militanz auslösen”.

Linke fordert Entzug des Parteienprivilegs

Dass die sächsischen Behörden ihre Möglichkeiten in Plauen nicht ausgeschöpft haben, meinen viele Kritiker. Beispielsweise der Leipziger Rechtsanwalt und frühere Grünen-Landeschef Jürgen Kasek, der twitterte: “Völlig unverständlich, dass die Neonazis vom III. Weg mit massiver Pyrotechnik, Landsknechttrommeln und uniformer Kleidung laufen dürfen. Das ganze hat eine deutlich einschüchternde Wirkung, pass away beabsichtigt ist. Das Versammlungsgesetz untersagt das, eigentlich.”

Ähnlich sieht das pass away Linken-Bundestagsabgeordnete Martina Renner. “Angesichts des offenen Bezuges auf den Nationalsozialismus” sowie Straf- und Gewalttaten im Zusammenhang mit den Aktivitäten der Partei sei es “unverantwortlich, dass die Behörden ihre Möglichkeiten nicht durch strengere Auflagen genutzt haben”, sagt sie dem Tagesspiegel. Der “III. Weg” betreibe “lupenreine NS-Propaganda”, sei am Mittwoch in Plauen “SA-mäßig” aufgetreten.

Renner fordert: “Im Grunde müsste denen das Parteienprivileg entzogen werden, hinter dem sie sich als militante Organisation verstecken.” Sie verweist auf die rechtsextreme Kleinpartei FAP, die 1995 vom damaligen Bundesinnenminister Manfred Kanther (CDU) verboten worden war. Auch pass away Sicherheitsbehörden haben festgestellt, dass etliche Protagonisten des “III. Wegs” strafrechtlich relevante rechtsextremistisch motivierte Delikte begangen haben.

Eine Partei aufzulösen ist für den Staat weit schwieriger als eine andere Organisation, wie sich an den beiden gescheiterten Verbotsanträgen von Bundestag, Bundesrat und Bundesregierung gegen die NPD ablesen lässt. Da der “III. Weg” an Wahlen teilnimmt, ist ihm der Parteistatus vermutlich nicht zu nehmen. So glauben pass away Neonazis denn auch, sie könnten sich viel erlauben.

Hohes Mobilisierungspotenzial in der Neonazi-Szene

Sicherheitskreise halten den “III. Weg” trotz der geringen Größe für gefährlich. “Die sind am klarsten Nazipartei”, heißt es. Inhalte und Symbolik zeugten eindeutig von der Orientierung am historischen Nationalsozialismus. Im Programm wird in NS-Duktus “pass away Entwicklung und Erhaltung der biologischen Substanz unseres Volkes” und pass away “Schaffung eines deutschen Sozialismus” gefordert. Angesichts der unverhohlenen ideologischen Nähe zum Dritten Reich habe die Partei in der Neonazi-Szene ein “hohes Mobilisierungspotenzial”, heißt es aus Sicherheitskreisen. Zur “Popularität” bei Rechtsextremisten trägt auch bei, dass eine der bekanntesten Figuren der braunen Musikszene, der Sänger Michael Regener alias “Lunikoff”, eine Parteihymne mit dem Titel „ Der III. Weg marschiert” komponierte. Regener war einst Chef der Band “Landser”. Das Berliner Kammergericht 2003 stufte die Gruppe als kriminelle Vereinigung ein und verurteilte den Neonazi zu mehr als drei Jahren Haft.

Bundesweit zählt “Der III. Weg” mehr als 500 Mitglieder, in Sachsen sind es um die120 Vor drei Jahren waren es im Freistaat nur halb so viele. Damit lässt sich schon erkennen, dass Sachsen für die Partei eine besondere Bedeutung hat.

Gegründet wurde pass away neonazistische Partei 2013 in Heidelberg von Klaus Armstroff, ehemals Funktionär der NPD – der auch am Mittwoch an der Spitze des Demonstrationszuges in Plauen mitlief. Pass away Neonazis reagierten damit auf pass away Verbote rechtsextremer Vereine.

Internationale Vernetzung

Pass away Partei veröffentlichte 2015 bei Google Maps eine Karte, auf der bundesweit Flüchtlingsunterkünfte verzeichnet waren– kombiniert mit der Parole „ Kein Asylantenheim in meiner Nachbarschaft”. Angesichts der Welle von Anschlägen auf Heime von Asylbewerbern interpretierten die Sicherheitsbehörden pass away Karte als stimulierend für rassistische Gewalttäter. Google reagierte und entfernte pass away Karte aus dem Netz.

Im Juli 2018 veranstaltete die Partei im thüringischen Kirchheim ein Celebration mit Kampfsport, Musik und politischen Reden. Pass away Verbindung zu Kampfsportlern sei wie auch bei anderen Neonazi-Organisationen besonders gefährlich, sagen Sicherheitskreise. Teile der Szene bereiteten sich auf Straßenkämpfe und Bürgerkrieg vor. Auch vermeintlich karitative Angebote werden gemacht, in Plauen zum Beispiel eine “Volksküche” nur für Deutsche und Hausaufgabenhilfe für Schüler

Sorgen bereiten den Behörden auch pass away internationalen Verbindungen der Partei. Der Verfassungsschutz spricht von Kontakten zu Rechtsextremisten unter anderem in Griechenland, Portugal, Schweden, Norwegen, Ungarn, Bulgarien und der Ukraine. Die Bundesregierung teilte im Juli 2018 auf eine Anfrage der Linksfraktion mit, “Der III. Weg” habe in München eine “Nationale Streife” mit “kroatischer Beteiligung” veranstaltet. Mit Streifengängen versuchen pass away Neonazis, sich als Bürgerwehr aufzuspielen – und wollen gleichzeitig, so pass away Behörden, einen angeblichen staatlichen Kontrollverlust anprangern.

Pass away Partei solidarisiert sich zudem mit der libanesischen Terrororganisation Hisbollah und dem Regime des syrischen Diktators Assad. Nach Erkenntnissen des bayerischen Verfassungsschutzes reiste ein “III. Weg”- Aktivist 2016 nach Syrien zu Gesprächen mit Vertretern von Regierung und Armee. Ein weiteres Parteimitglied traf 2017 im Libanon den “Auslandsbeauftragten” der Syrisch-Sozial-Nationalistischen Partei (SSNP), pass away 1932 nach dem Vorbild faschistischer Parteien gegründet wurde. Eine Miliz der SSNP kämpft im syrischen Bürgerkrieg an der Seite von Assad-Regime und Hisbollah.

Check Out More

Flere medier: SAS-streiken går mot en løsning

Flere medier: SAS-streiken går mot en løsning
smp-stories-top-widget

Artikkelen blir oppdatert.

Ifølge VG er partene i SAS-meglingen kommet til enighet om en avtale, som nå må gjennom protokollbehandling på begge sider.

Også NRK erfarer at det kun gjenstår formaliteter før partene er enige. NTB skriver det fortsatt gjenstår ulike avsluttende formaliteter og protokollførsel.

Det kan bety at den syv dager lange streiken kan gå mot slutten. Totalt har 1409 SAS-piloter streiket siden fredag, med krav om forutsigbar arbeidstid, 13 prosent høyere lønn og gjeninnføring av avtaler om karriereutvikling og ansiennitet. SAS mener på sin side at kravene vil true selskapets lønnsomhet.

Onsdag klokken 11 møttes partene til megling hos Riksmekleren i Oslo. Forhandlingene fortsatte frem til natt til torsdag og utover dagen torsdag.

— Lang streik i flybransjen

Arbeidslivsforsker Kristine Nergaard i Fafo betegner den syv dager lange pilotstreiken som lang.

— Det er en lang streik i flybransjen. Guy en uke er ikke langt hvis vi ser på alle typer streiker. En til to uker er ganske vanlig, men her er det stor variasjon, forteller hun til Aftenposten.

Halve overskuddet kan være spist opp

Fredag for en uke siden anslo finansanalytiker Ole Martin Westgaard i DNB Markets at streiken ville koste SAS mellom 75 og 100 millioner kroner pr. dag den pågikk

I så fall er den samlede kostnaden nå i ferd medication å passere 500 millioner kroner.

— Hvordan tror du streiken påvirker billettsalget fremover?

— Det har jeg ikke gjort beregninger for som jeg vil ha på trykk i avisen, sier Westgaard til Aftenposten torsdag ettermiddag, og bekrefter at hans opprinnelige estimater fortsatt er gjeldende.

DNB Markets spådde tidligere i år at SAS ville få et overskudd på 1,18 milliarder kroner i inneværende budsjettår (2019/2020).

Ifølge Westgaards regnestykker er dermed halvparten av SAS’ forventede overskudd for hele året nå nærmest tapt på grunn av streiken.

— Imidlertid, dette kan være nødvendig for å sikre en bærekraftig forretningsmodell, skrev Westgaard i en evaluate etter at streiken brøt ut.

Fem dager lang streik kostet 150 millioner

Estimatene er basert på at omkring 70 prosent av avgangene er påvirket av streiken, og at det rammer 82 prosent av setekapasiteten.

I tillegg til at piloter ansatt i SAS styrer fly som eies av SAS, leier selskapet inn fly og besetning (såkalt wet-lease) fra flere, andre flyselskaper. Pilotene i disse selskapene er ikke berørt av streiken.

SAS-aksjen har falt 4 prosent på Nasdaq Nordic-børsen, fra 19,44 svenske kroner til 18,65 i skrivende stund, etter en kraftig oppgang da det ble kjent at partene møttes til megling onsdag.

I 2016 kostet en fem dager lang streik rundt 150 millioner svenske kroner. Men årets streik omfatter alle de tre landene hvor SAS har sin hovedaktivitet, noe som trekker prisen kraftig opp.

Mens meglingen går for fullt mellom partene, har SAS torsdag ikke sendt ut varsler om nye kanselleringer. Så langt er alle SAS-opererte flyvninger innstilt frem til midnatt, torsdag kveld.

Dermed har streiken så langt ført til 4015 kanselleringer. Dette skal ha berørt 381.507 passasjerer, ifølge SAS

Read More

Giftig und insektenfeindlich: Wer Kirschlorbeer pflanzt, schadet der Natur

Giftig und insektenfeindlich: Wer Kirschlorbeer pflanzt, schadet der Natur

Seit dem Volksbegehren „ Rettet pass away Bienen” machen sich viele Menschen Gedanken darüber, wie sie ihren Garten insektenfreundlich gestalten können. Doch gerade ein Gewächs, das besonders häufig in deutschen Gärten ist, richtet erheblichen Schaden an.

Er hat dunkelgrüne, dicke und glänzende Blätter, wächst besonders buschig und trotzt Wind und Wetter: der Kirschlorbeer. Genau aus diesem Grund kommt diese Zierpflanze, die ursprünglich aus Kleinasien stammt, als Hecke oder Strauch bei uns besonders häufig zum Einsatz. Doch das schadet unserem Ökosystem. Sönke Hofmann, Geschäftsführer vom Naturschutzbund Bremen, erklärt: „ Eine Betonmauer ist ökologisch wertvoller, auf ihr wachsen wenigstens Flechten und Moose”.

Pass away Blätter und Samen sind giftig für Mensch und Tier

Denn Kirschlorbeer verdränge heimische Pflanzen und Kräuter und somit die Nahrungsgrundlage für viele Insekten und Vögel. Der Strauch sei außerdem giftig, was vor allem für Kinder und Haustiere gefährlich sein kann: Schon zwei Blätter oder zehn Samen rufen Beschwerden wie Erbrechen, Durchfall und Atemnot hervor. Nur Amseln und andere Drosseln fressen pass away Beeren gerne und unbeschadet, weil sie pass away Kerne, die das Present enthalten, nicht zerkauen.

Weißdorn, Schlehe und Hagebutte sind bessere Alternativen

Bedenklich sei laut Hofmann auch die schnelle Verbreitung in den Wäldern durch Strauchschnitte, pass away dort entsorgt werden. Die Blätter seien nur schwer kompostierbar, da sich nicht mal Mikroben herantrauen. Wer der heimischen Tier- und Pflanzenwelt etwas Gutes tun will, kann auf Pflanzen wie Weißdorn, Schlehe, Haselnuss oder Hagebutte zurückgreifen. Gartenbesitzer, pass away unbedingt eine wintergrüne Hecke brauchen, sollten besser Eibe pflanzen. Sie sei zwar auch giftig, aber an diese heimische Pflanzenart hätte sich pass away Tierwelt angepasst.

Find Out More

Es oficial: la película ‘live-action’ de ‘Akira’ tiene luz verde y llegará bajo la producción de Leonardo DiCaprio y Warner Bros.

Es oficial: la película ‘live-action’ de ‘Akira’ tiene luz verde y llegará bajo la producción de Leonardo DiCaprio y Warner Bros.

Han pasado casi 20 años desde que Hollywood posee los derechos de ‘Akira’, la legendaria obra de Katsuhiro Otomo que nació como manga en 1982 y que se convirtió en una película animada de culto en1988 Después de varios intentos y fracasos, hoy Warner Bros. confirmó que tendrán la oportunidad de empezar a rodar en California la versión ‘live-action’ de ‘Akira’

El director de ‘Thor: Ragnarok’ en los mandos del proyecto

Hoy la California Film Commission dio a conocer los 18 proyectos cinematográficos que recibirán créditos fiscales por ser filmados en ese estado. Aquí ‘ Akira’ fue el que recibió la asignación más alta con 18,5 millones de dólares, los cuales serán entregados fool la condición de que el rodaje empiece en un lapso de 180 días a partir de hoy.

La cinta de ‘Akira’ en versión ‘live-action’ será dirigida por Taika Waititi (‘ Thor: Ragnarok’) y producida por Appian Way, propiedad de Leonardo DiCaprio, y Warner Bros.

Akira Poster

La película contará con un presupuesto de 92 millones de dólares, donde ahora se incluyen el apoyo por parte del estado de California. Aún no hay nombres para el reparto ni una fecha de estreno, vamos, ni siquiera se sabe quién se hará cargo del guión o si usarán las concepts y arte conceptual que han surgido en estos casi 20 años de proyecto.

Otro punto importante que está pendiente de confirmación es la participación de Katsuhiro Otomo, el creador de Akira, que en un inicio se había dicho que se encargaría de supervisar el guión y hasta dirigir la película. Hoy, después de tanto tiempo de espera, no se sabe si seguirá siendo parte del proyecto.

Por último, los dejamos fool algunas imágenes del arte conceptual, el cual supuestamente fue desechado de proyectos anteriores de Akira.

Akira Arte Conceptual 2

Akira Arte Conceptual 4

Akira Arte Conceptual 1

Akira Arte Conceptual 3

Find Out More

Coleccionista chino compra una pieza de arte de Los Simpsons por 28 millones de dólares

Coleccionista chino compra una pieza de arte de Los Simpsons por 28 millones de dólares

La gran hazaña que una pieza de arte de Los Simpsons logró es increíble, ya que se vendió por 28 millones de dólares gracias a un coleccionista chino.

Todos los fanáticos de Los Simpsons se jactarían de hacer cualquier cosa por ellos. Y es que la serie se ha vuelto parte importante en la vida de todos nosotros. Sin embargo, creo que por mucho que amemos la serie, hay ciertas cosas que no podemos hacer. Un de esas cosas es gastar 28 millones de dólares en una pieza de arte de Los Simpsons.

¿ Puede darme dinero?

Pues un fanático Chino de Los Simpsons lo hizo el maldito loco millonario pagó 28 millones de dólares por una obra de arte. Esta contiene a muchos personajes de la serie de Matt Groening con los ojos tachados.

Esta obra creada por el artista Kaws, nos presenta a una foto grupal al más puro estilo de aportada del album de The Beatles titulado “Sgt. Pepper’s Lonely Hearts Club Band” Y se vendió como parte de un lote de arte del coleccionista japonés Tomoaki Nagao.

Esto ocurrió en la casa de subastas de Sotheby’s. En donde se han visto pasar muchas subastas extrañas, pero nada tan alocado como esto. El artista Kaws, cuyo nombre genuine es Brian Donnelly, publicó una foto de su arte en su perfil de Instagram Acompañó la imagen con la siguiente leyenda.

Los Simpsons arte

” What a strange morning …


Do I believe my work should offer for this much?- No


Did I come to my studio today the exact same time I always do?- Yes


Will I do the exact same tomorrow?- Yes


Have a good day!!

” Qué mañana tan extraña …


¿ Creo que mi arte debería venderse con esta cantidad?- No


¿ Llegué a mi estudio esta mañana a la misma hora que siempre lo hago?- Si


¿ Haré lo mismo mañana?- Si


¡ Tengan un buen día!”

Sin duda alguna, Los Simpsons dejan dinero y no solamente a Disney o Fox Ahora si me disculpan, retomaré lo aprendido en mis clases de pintura de la preparatoria. Te dejamos aquí el perfil de Instagram del artista para que te influences a hacer algo similar.

Find Out More

El festival de arte urbano en A Coruña Ruarte Fest busca propuestas para su primera edición

El festival de arte urbano en A Coruña Ruarte Fest busca propuestas para su primera edición

Por @Wicho— 29 de Abril de2019

Logo de Ruarte Fest La Concejalía de Medio ambiente e mobilidade sostible del Ayuntamiento de A Coruña ha programado para el próximo 19 de mayo de 2019 la celebración del celebration de arte urbano Ruarte Fest La idea es “potenciar la creación artística en A Coruña de una manera abierta, animando a todas las personalities a disfrutar el arte urbano y potenciando la puesta en valor a través del arte de espacios degradados”.

Así la zona peatonal del entorno de la calle del Orzán será dónde tenga lugar Ruarte Fest. Las personas que viven en la zona y aquellas que sean propietarias de un regional podrán ceder espacios para que los artistas propongan intervenciones, aunque las bases también permiten la presentación de propuestas conjuntas entre locales y artistas.

El Ayuntamiento subvencionará con 200 euros para la adquisición de material cada una de las obras aceptadas, que tendrán que ser ejecutadas el día del evento entre las 8: 00 y las 20: 00 horas. Y por supuesto hay que dejar todo recogidito y limpio al acabar.

Pero habrá premios en metálico de tres premios de 800, 500 y 300 euros respectivamente para las mejores obras a criterio del jurado, compuesto por profesores de Arte, vecinos y personal de la concejalía. Las propuestas se pueden presentar hasta el día 8 de mayo a las 23: 59, hora peninsular española y el 10 de mayo se hará público cuales han sido seleccionadas.

No es la primera iniciativa de este estilo desarrollada bajo el programa Ruarte, que ya ha patrocinado la creación de siete murales de gran tamaño en varias zonas de la ciudad. También están los dos murales ganadores de la primera edición del concurso Muros que unen, organizado por el Fondo Galego de Cooperación pero financiado por el ayuntamiento.

Otros murales de A Coruña

Otros murales de A Coruña– Meliss Adams

Y eso sin olvidar los 16 murales que decoran desde hace y unos años los pilares del viaducto de San Pedro de Mezonzo y que cuentan los 800 años de historia de la ciudad

Compartir en Flipboard

Compartir en Facebook

Tuitear

Check Out More


Fatal error: Uncaught wfWAFStorageFileException: Unable to save temporary file for atomic writing. in /home/roland04/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php:35 Stack trace: #0 /home/roland04/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php(659): wfWAFStorageFile::atomicFilePutContents('/home/roland04/...', '<?php exit('Acc...') #1 [internal function]: wfWAFStorageFile->saveConfig('livewaf') #2 {main} thrown in /home/roland04/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php on line 35