{"id":5373,"date":"2022-06-02T10:27:47","date_gmt":"2022-06-02T08:27:47","guid":{"rendered":"https:\/\/new.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/"},"modified":"2023-03-08T16:04:01","modified_gmt":"2023-03-08T15:04:01","slug":"how-to-offer-an-nginx-webserver-using-yaook-kubernetes","status":"publish","type":"post","link":"https:\/\/www.cloudandheat.com\/en\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/","title":{"rendered":"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"5373\" class=\"elementor elementor-5373\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2cc8b6f2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2cc8b6f2\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6be1ea90\" data-id=\"6be1ea90\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-52b3d9cf elementor-widget elementor-widget-text-editor\" data-id=\"52b3d9cf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\tHi! We are Vama and Lavon, working students at Cloud&amp;Heat Technologies. In this tutorial, we would like to show you how to offer an NGINX webserver using <a href=\"https:\/\/yaook.cloud\/\">Yaook<\/a> Kubernetes (yk8s) by Cloud&amp;Heat and Schwarz IT.\n\n&nbsp;\n\nYou may wonder why it&#8217;s so much work to spin up a simple k8s cluster, if there are way more shorter tutorials at hand. <code>yk8s<\/code> is clearly not supposed to simply run an NGINX, but instead more complex setups, and for these life cycle management is a very important task. How do I upgrade my k8s, my systems hosting it, how to increase the worker count or migrate some gateways to a different AZ? <code>yk8s<\/code> is supposed to solve these issues, as at the time of starting that project we couldn&#8217;t find tooling to fulfill all our requirements.\n\n&nbsp;\n\nThese days for example we operate our OpenStack based on that. The code for it is also under the umbrella of the Yaook project so feel free to check that out afterwards! We are also planning to move internal services like GitLab or Nextcloud into <code>yk8s<\/code>.\n\n&nbsp;\n\n<a href=\"https:\/\/yaook.gitlab.io\/k8s\">yk8s Handbook: https:\/\/yaook.gitlab.io\/k8s<\/a>\n<h3 id=\"legend\">Legend<\/h3>\n&nbsp;\n<ul>\n \t<li>Lines prefixed with <code>$<\/code> are commands to be executed<\/li>\n \t<li>Lines prefixed with <code>#<\/code> are comments<\/li>\n \t<li>Lines surrounded by <code>&lt;&gt;<\/code> need to be computed by your brain and replaced accordingly<\/li>\n<\/ul>\n<h3 id=\"what-do-we-need-\">What do we need?<\/h3>\n&nbsp;\n<ul>\n \t<li>Access to an OpenStack cloud with the following resources available\n<ul>\n \t<li>Ubuntu 18.04 or 20.04 and Debian 10 or 11 images\n<ul>\n \t<li>The login to the Ubuntu instance needs to be <code>ubuntu<\/code><\/li>\n \t<li>The login to the Debian instance needs to be <code>debian<\/code><\/li>\n<\/ul>\n<\/li>\n \t<li>At least 3 VMs need to be able to spawn<\/li>\n \t<li>Flavors\n<ul>\n \t<li>1xXS (RAM: 1GB, vCPUs: 1, Disk: 10GB)<\/li>\n \t<li>2xM (RAM: 4GB; vCPUs: 2; Disk: 25GB)<\/li>\n<\/ul>\n<\/li>\n \t<li>Network\n<ul>\n \t<li>1 project network needs to be able to be created<\/li>\n \t<li>1 project router needs to be able to be created<\/li>\n \t<li>1 provider network for access to the internet needs to be available<\/li>\n \t<li>at least 2 floating IPs allocatable, 10 ports in total will be created<\/li>\n<\/ul>\n<\/li>\n \t<li>A SSH key configured to access spawned instances and the name of that key known to you<\/li>\n<\/ul>\n<\/li>\n \t<li>A Unix shell environment for running the tutorial (called workstation)\nNote: The tutorial is based on Ubuntu 20.04<\/li>\n \t<li>The link to the FAQ in case you hit trouble:\n<a href=\"https:\/\/yaook.gitlab.io\/k8s\/faq.html\">https:\/\/yaook.gitlab.io\/k8s\/faq.html<\/a><\/li>\n \t<li>A way to connect to us in case the FAQ can&#8217;t help, we are in #yaook on oftc via IRC:\n<a href=\"https:\/\/webchat.oftc.net\/?channels=yaook\">https:\/\/webchat.oftc.net\/?channels=yaook<\/a><\/li>\n<\/ul>\nWe are now going to install all dependencies that we need to create a Kubernetes cluster and to enjoy our website. Please do not hesitate to get in contact in case you hit any problems!\nBut now let&#8217;s start!\n<h3 id=\"prepare-the-workstation\">Prepare the workstation<\/h3>\n&nbsp;\n\nWe begin with the packages required to be installed (remember it&#8217;s Ubuntu 20.04 based):\n\n&nbsp;\n<pre><code>$ sudo apt install \npython3-pip \npython3-venv \npython3-toml \nmoreutils \njq \nwireguard \npass \ndirenv\n<\/code><\/pre>\n<h3 id=\"install-terraform\">Install Terraform<\/h3>\n&nbsp;\n\nTerraform allows infrastructure to be expressed as code in a simple, human readable language called HCL (HashiCorp Configuration Language). It reads configuration files and provides an execution plan of changes, which can be reviewed for safety and then applied and provisioned.\n\nTo install Terraform, we run these commands, taken from <a href=\"https:\/\/www.terraform.io\/downloads\">https:\/\/www.terraform.io\/downloads<\/a>\n\n&nbsp;\n<pre><code>$ curl -fsSL https:\/\/apt.releases.hashicorp.com\/gpg | sudo apt-key <span class=\"hljs-keyword\">add<\/span><span class=\"bash\"> -\n<\/span>$ sudo apt-<span class=\"hljs-keyword\">add<\/span><span class=\"bash\">-repository <span class=\"hljs-string\">\"deb [arch=amd64] https:\/\/apt.releases.hashicorp.com <span class=\"hljs-variable\">$(lsb_release -cs)<\/span> main\"<\/span>\n<\/span>$ sudo apt-get update &amp;&amp; sudo apt-get install terraform\n<\/code><\/pre>\n<h3 id=\"install-helm\">Install Helm<\/h3>\n&nbsp;\n\nHelm is the package manager for Kubernetes. It is used to build Helm charts, which are packages of Kubernetes resources that are used to deploy apps to a cluster.\n\nPlease follow the install instructions on <a href=\"https:\/\/helm.sh\/docs\/intro\/install\/\">https:\/\/helm.sh\/docs\/intro\/install\/<\/a>\n\n&nbsp;\n<pre><code>$ curl http<span class=\"hljs-variable\">s:<\/span>\/\/baltocdn.<span class=\"hljs-keyword\">com<\/span>\/helm\/signing.asc | sudo apt-key <span class=\"hljs-built_in\">add<\/span> -\n$ sudo apt-<span class=\"hljs-built_in\">get<\/span> install apt-transport-https --yes\n$ <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"deb https:\/\/baltocdn.com\/helm\/stable\/debian\/ all main\"<\/span> | sudo tee \/etc\/apt\/sources.<span class=\"hljs-keyword\">list<\/span>.d\/helm-stable-debian.<span class=\"hljs-keyword\">list<\/span>\n$ sudo apt-<span class=\"hljs-built_in\">get<\/span> <span class=\"hljs-keyword\">update<\/span>\n$ sudo apt-<span class=\"hljs-built_in\">get<\/span> install helm\n<\/code><\/pre>\n<h3 id=\"configure-wireguard\">Configure WireGuard<\/h3>\n&nbsp;\n\nFor increased security the Kubernetes cluster is by default not directly accessible from the internet. Instead you can only reach it via a VPN &#8211; for that purpose WireGuard (<code>WG<\/code>) is used. In front of the actual Kubernetes cluster at least one gateway host is configured which exposes a SSH and WireGuard endpoint to the public. These are your access points towards the whole cluster until you expose services explicitly via the k8s mechanics.\n\n&nbsp;\n<pre><code><span class=\"hljs-comment\"># Create configuration directory for WG<\/span>\n<span class=\"hljs-variable\">$ <\/span>mkdir ~<span class=\"hljs-regexp\">\/.wireguard\/<\/span>\n\n<span class=\"hljs-comment\"># Create WG private key<\/span>\n<span class=\"hljs-variable\">$ <\/span>(umask <span class=\"hljs-number\">0077<\/span> &amp;&amp; wg genkey &gt; ~<span class=\"hljs-regexp\">\/.wireguard\/wg<\/span>.key)\n\n<span class=\"hljs-comment\"># Generate export the public key into a file<\/span>\n<span class=\"hljs-variable\">$ <\/span>wg pubkey &lt; ~<span class=\"hljs-regexp\">\/.wireguard\/wg<\/span>.key &gt; ~<span class=\"hljs-regexp\">\/.wireguard\/wg<\/span>.pub\n<\/code><\/pre>\n<h3 id=\"configure-gpg\">Configure GPG<\/h3>\n&nbsp;\n\nSome credentials are stored in the<code>password-manager pass,<\/code>for example the private key of the WG VPN. Therefore you need to have a GPG key available.\n\nIf you already have a gpg key you can get the long ID that you need in a later step by executing the following:\n\n&nbsp;\n<pre><code><span class=\"hljs-variable\">$ <\/span>gpg --keyid-format LONG -K test.user<span class=\"hljs-variable\">@mail<\/span>.fake\n<\/code><\/pre>\nIf you don&#8217;t have one you can generate one by executing the following snippet. Please adapt the name and email address to use as well as the password.\n\n&nbsp;\n<pre><code>$ gpg --batch --gen-key &lt;&lt;EOF\nKey-<span class=\"hljs-string\">Type:<\/span> <span class=\"hljs-number\">1<\/span>\nKey-<span class=\"hljs-string\">Length:<\/span> <span class=\"hljs-number\">4096<\/span>\nSubkey-<span class=\"hljs-string\">Type:<\/span> <span class=\"hljs-number\">1<\/span>\nSubkey-<span class=\"hljs-string\">Length:<\/span> <span class=\"hljs-number\">4096<\/span>\nName-<span class=\"hljs-string\">Real:<\/span> Test Name\nName-<span class=\"hljs-string\">Email:<\/span> test.user<span class=\"hljs-meta\">@mail<\/span>.fake\nExpire-<span class=\"hljs-string\">Date:<\/span> <span class=\"hljs-number\">0<\/span>\n<span class=\"hljs-string\">Passphrase:<\/span> password\nEOF\n<\/code><\/pre>\n<h3 id=\"getting-the-openstack-configuration\">Getting the OpenStack configuration<\/h3>\n&nbsp;\n\nTo be able to communicate with the OpenStack cloud you should fetch the <code>openrc<\/code> file via the Dashboard of your cloud provider. Make sure you are logged in as the correct user and with the correct project. It should be possible to fetch that file from the dashboard either by using the path <code>project\/api_access\/openrc\/<\/code>or by clicking the menu entry for fetching it.\n\nPlace the fetched file in an own directory:\n\n&nbsp;\n<pre><code># Create <span class=\"hljs-keyword\">a<\/span> folder <span class=\"hljs-keyword\">for<\/span> OpenStack openrc <span class=\"hljs-keyword\">files<\/span>\n$ <span class=\"hljs-built_in\">mkdir<\/span> ~\/.openstack\n$ mv ~\/Downloads\/<span class=\"hljs-symbol\">&lt;filename&gt;<\/span> ~\/.openstack\/my-cluster-repository-openrc.<span class=\"hljs-keyword\">sh<\/span>\n<\/code><\/pre>\n<h3 id=\"prepare-the-cluster-repository\">Prepare the cluster repository<\/h3>\n&nbsp;\n<pre><code><span class=\"hljs-comment\"># Create the Python virtual environment to isolate the dependencies<\/span>\n<span class=\"hljs-comment\"># This is the default location used by direnv<\/span>\n$ <span class=\"hljs-keyword\">mkdir<\/span> ~<span class=\"hljs-regexp\">\/.venv\/<\/span>\n$ python3 -<span class=\"hljs-keyword\">m<\/span> venv ~<span class=\"hljs-regexp\">\/.venv\/managed<\/span>-k8s\/\n\n<span class=\"hljs-comment\"># Create project folder<\/span>\n$ <span class=\"hljs-keyword\">mkdir<\/span> yaook-project\n$ cd yaook-project\n\n<span class=\"hljs-comment\"># Clone`yaook\/k8s` repository<\/span>\n$ git clone https:<span class=\"hljs-regexp\">\/\/gitlab<\/span>.com\/yaook\/k8s.git\n\n<span class=\"hljs-comment\"># Create an empty directory as your cluster repository:<\/span>\n$ git init <span class=\"hljs-keyword\">my<\/span>-cluster-repository\n\n<span class=\"hljs-comment\"># Setup your environment variables:<\/span>\n$ cp k8s\/templates\/envrc.template.sh <span class=\"hljs-keyword\">my<\/span>-cluster-repository\/.envrc\n<\/code><\/pre>\n<h3 id=\"configure-direnv\">Configure direnv<\/h3>\n&nbsp;\n\n<code>direnv<\/code> is a simple way to configure directory specific environment variables or automatically execute scripts &#8211; so as soon as you switch in your directory with the configuration data for your setup it will set required variables like credentials and source the Python virtual environment.\nFor direnv to work, it needs to be hooked into your shell <a href=\"https:\/\/direnv.net\/docs\/hook.html\">https:\/\/direnv.net\/docs\/hook.html<\/a>\n\n&nbsp;\n<pre><code><span class=\"hljs-comment\"># edit the target file my-cluster-repository\/.envrc as follows by<\/span>\n<span class=\"hljs-comment\"># adapting the corresponding lines:<\/span>\nwg_private_key_file=<span class=\"hljs-string\">\"${HOME}\/.wireguard\/wg.key\"<\/span>\nwg_user='&lt;however_you_want_to_name_your_wg_user&gt;'\nTF_VAR_keypair='&lt;name_of_the_ssh_public_key_in_your_openstack_account&gt;'\n\n<span class=\"hljs-comment\"># put that at the end of that file to load your OpenStack credentials<\/span>\nsource_env ~\/.openstack\/<span class=\"hljs-keyword\">my<\/span>-cluster-repository-openrc.sh\n\n<span class=\"hljs-comment\"># Change the working dir into the new cluster repository<\/span>\n<span class=\"hljs-comment\"># you should be asked if you want to unblock the .envrc<\/span>\n$ cd <span class=\"hljs-keyword\">my<\/span>-cluster-repository\/\ndirenv: <span class=\"hljs-keyword\">error<\/span> \/home\/path\/<span class=\"hljs-keyword\">to<\/span>\/yaook-project\/<span class=\"hljs-keyword\">my<\/span>-cluster-repository\/.envrc <span class=\"hljs-keyword\">is<\/span> blocked. Run `direnv allow` <span class=\"hljs-keyword\">to<\/span> approve <span class=\"hljs-keyword\">its<\/span> content\n$ direnv allow\n<span class=\"hljs-comment\"># it should ask you for your OpenStack account password now every time<\/span>\n<span class=\"hljs-comment\"># you go into that directory<\/span>\n<\/code><\/pre>\n<h3 id=\"initialize-the-cluster-repository\">Initialize the cluster repository<\/h3>\n&nbsp;\n<pre><code><span class=\"hljs-comment\"># Initialize the cluster repository<\/span>\n<span class=\"hljs-variable\">$ <\/span>..\/k8s\/actions\/init.sh\n<span class=\"hljs-variable\">$ <\/span>git add .\n<span class=\"hljs-variable\">$ <\/span>git commit -am <span class=\"hljs-string\">'Init the cluster repository'<\/span>\n\n<span class=\"hljs-comment\"># Install requirements<\/span>\n<span class=\"hljs-variable\">$ <\/span>python3 -m pip install -r managed-k8s\/requirements.txt\n<span class=\"hljs-comment\"># don't get confused by red lines, check the exit code if it was<\/span>\n<span class=\"hljs-comment\"># successful<\/span>\n<span class=\"hljs-variable\">$ <\/span>echo <span class=\"hljs-variable\">$?<\/span> <span class=\"hljs-comment\"># should output 0<\/span>\n<\/code><\/pre>\n<h3 id=\"edit-the-config-toml-file\">Edit the config.toml file<\/h3>\n&nbsp;\n\nAs a next step we need to adjust the actual configuration for the k8s cluster so please edit <code>config\/config.toml<\/code> with an editor of your choice. For a full config reference check:\n<a href=\"https:\/\/yaook.gitlab.io\/k8s\/usage\/cluster-configuration.html\">https:\/\/yaook.gitlab.io\/k8s\/usage\/cluster-configuration.html<\/a>\n\nSearch for <code>ANCHOR: terraform_config<\/code> and add the following lines behind <code>[terraform]<\/code> or adapt them:\n\n&nbsp;\n<pre><code><span class=\"hljs-comment\"># for testing 1 is enough, for production at least 3 are<\/span>\n<span class=\"hljs-comment\"># recommended for HA<\/span>\n<span class=\"hljs-attr\">masters<\/span> = <span class=\"hljs-number\">1<\/span> \n<span class=\"hljs-attr\">workers<\/span> = <span class=\"hljs-number\">1<\/span>\n\n<span class=\"hljs-comment\"># specify the flavor names to use for the different node types, please<\/span>\n<span class=\"hljs-comment\"># adapt to your cloud:<\/span>\n<span class=\"hljs-attr\">gateway_flavor<\/span> = <span class=\"hljs-string\">\"XS\"<\/span>\n<span class=\"hljs-attr\">master_flavors<\/span> = [<span class=\"hljs-string\">\"M\"<\/span>]\n<span class=\"hljs-attr\">worker_flavors<\/span> = [<span class=\"hljs-string\">\"M\"<\/span>]\n\n<span class=\"hljs-comment\"># do not distribute critical components over multiple availability<\/span>\n<span class=\"hljs-comment\"># zones for higher reliability, don't turn this off for production<\/span>\n<span class=\"hljs-attr\">enable_az_management<\/span> = <span class=\"hljs-literal\">false<\/span>\n\n<span class=\"hljs-comment\"># Define the AZ names to use, <span class=\"hljs-doctag\">NOTE:<\/span> The count of the array automatically<\/span>\n<span class=\"hljs-comment\"># also determines the gateway VM count! As long as<\/span>\n<span class=\"hljs-comment\"># \"enable_az_management\" is false the name doesn't matter only the<\/span>\n<span class=\"hljs-comment\"># count. But adapt that to 3 real names for your cloud provider in<\/span>\n<span class=\"hljs-comment\"># production:<\/span>\n<span class=\"hljs-attr\">azs<\/span> = [<span class=\"hljs-string\">\"AZ1\"<\/span>]\n\n<span class=\"hljs-comment\"># Specify the Linux distribution to use. Right now we support Ubuntu<\/span>\n<span class=\"hljs-comment\"># 18.04 and 20.04 for masters and workers and Debian 10 and 11 for the<\/span>\n<span class=\"hljs-comment\"># gateways. The names need to be adapted to the image names of your<\/span>\n<span class=\"hljs-comment\"># cloud provider<\/span>\n<span class=\"hljs-attr\">default_master_image_name<\/span> = <span class=\"hljs-string\">\"Ubuntu 20.04 LTS x64\"<\/span>\n<span class=\"hljs-attr\">default_worker_image_name<\/span> = <span class=\"hljs-string\">\"Ubuntu 20.04 LTS x64\"<\/span>\n<span class=\"hljs-attr\">gateway_image_name<\/span> = <span class=\"hljs-string\">\"Debian 11 (bullseye)\"<\/span>\n\n<span class=\"hljs-comment\"># Specify the name of the provider network for providing floating IPs<\/span>\n<span class=\"hljs-attr\">public_network<\/span> = <span class=\"hljs-string\">\"shared-public-IPv4\"<\/span>\n<\/code><\/pre>\nSearch for <code>ANCHOR: ch-k8s-lbaas_config<\/code> and edit <code>shared_secret<\/code> with the output of <code>dd if=\/dev\/urandom bs=16 count=1 status=none | base64<\/code>\n<pre><code><span class=\"hljs-attr\">shared_secret<\/span> = &lt;e.g. <span class=\"hljs-string\">\"JPueUpAf5FLOe6vcwQlc4w==\"<\/span>&gt;\n<\/code><\/pre>\nSearch for: <code># ANCHOR: wireguard_config<\/code> and add behind <code>[wireguard]<\/code>. The string <code>xmDACa5sVBv5+nAzpzoPwDv0U00nHxvWXaAMIV466zo=<\/code>comes from the file <code>~\/.wireguard\/wg.pub<\/code>.\n<pre><code><span class=\"hljs-section\">[[wireguard.peers]]<\/span>\n<span class=\"hljs-attr\">pub_key<\/span> = &lt;<span class=\"hljs-string\">\"xmDACa5sVBv5+nAzpzoPwDv0U00nHxvWXaAMIV466zo=\"<\/span>&gt;\n<span class=\"hljs-attr\">ident<\/span> = &lt;<span class=\"hljs-string\">\"however_you_want_to_name_your_wg_user\"<\/span>&gt;\n<\/code><\/pre>\nSearch for <code>ANCHOR: passwordstore_configuration<\/code> and add behind <code>[passwordstore]<\/code>\n<pre><code>[[passwordstore.additional_users]]\nident = &lt;your GPG key mail <span class=\"hljs-selector-tag\">address<\/span>, e<span class=\"hljs-selector-class\">.g<\/span>. <span class=\"hljs-string\">\"test.user@mail.fake\"<\/span>&gt;\ngpg_id = &lt;yourt GPG long ID, e<span class=\"hljs-selector-class\">.g<\/span>. <span class=\"hljs-string\">\"238F9AED92DD4C36148F45F68846E45B1F4D115F\"<\/span>&gt;\n<\/code><\/pre>\n<h3 id=\"spawn-the-cluster\">Spawn the cluster<\/h3>\n&nbsp;\n<pre><code>$ managed-k8s<span class=\"hljs-regexp\">\/actions\/<\/span>apply.sh\n<\/code><\/pre>\nThis will do a full deploy and consists of multiple stages. You can also execute these steps manually one after another instead of directly call <code>apply.sh<\/code>in case you want to better understand what&#8217;s going on &#8211; simply check the script for what to execute in which order. Details about the steps can be found here: <a href=\"https:\/\/yaook.gitlab.io\/k8s\/operation\/actions-references.html\">https:\/\/yaook.gitlab.io\/k8s\/operation\/actions-references.html<\/a>\n\nNote: If you change the Cloud configuration in a destructive manner (decrease node counts, change flavors, \u2026) after having the previous config already deployed these changes will not be applied. For that case you need to use an additional environment variable. You should not export that variable to avoid breaking things by accident.\n\n&nbsp;\n<pre><code><span class=\"hljs-variable\">$ <\/span>MANAGED_K8S_RELEASE_THE_KRAKEN=<span class=\"hljs-keyword\">true<\/span> managed-k8s\/actions\/apply.sh\n<\/code><\/pre>\nFrom this point on you can use the k8s cluster for deploying any application.\n\nTo follow the infrastructure as code approach it&#8217;s recommended to put the information into git e.g. by\n\n&nbsp;\n<pre><code>git <span class=\"hljs-keyword\">add<\/span><span class=\"bash\"> .\n<\/span>git commit -am <span class=\"hljs-string\">'Spin up the k8s'<\/span>\n<\/code><\/pre>\n<h3 id=\"deploy-nginx\">Deploy NGINX<\/h3>\n&nbsp;\n\nCreate a directory <code>apps<\/code> within the <code>my-cluster-repository<\/code> directory and in there create a file <code>nginx-deployment.yaml<\/code> with the following content:\n<pre><code><span class=\"hljs-meta\">---<\/span>\n<span class=\"hljs-attr\">apiVersion:<\/span> apps\/v1\n<span class=\"hljs-attr\">kind:<\/span> Deployment\n<span class=\"hljs-attr\">metadata:<\/span>\n<span class=\"hljs-attr\">  name:<\/span> nginx-deployment\n<span class=\"hljs-attr\">spec:<\/span>\n<span class=\"hljs-attr\">  selector:<\/span>\n<span class=\"hljs-attr\">    matchLabels:<\/span>\n<span class=\"hljs-attr\">      app:<\/span> nginx\n<span class=\"hljs-attr\">  replicas:<\/span> <span class=\"hljs-number\">1<\/span> <span class=\"hljs-comment\"># if you have multiple worker you can increase that for HA<\/span>\n<span class=\"hljs-attr\">  template:<\/span>\n<span class=\"hljs-attr\">    metadata:<\/span>\n<span class=\"hljs-attr\">      labels:<\/span>\n<span class=\"hljs-attr\">        app:<\/span> nginx\n<span class=\"hljs-attr\">    spec:<\/span>\n<span class=\"hljs-attr\">      containers:<\/span>\n<span class=\"hljs-attr\">      - name:<\/span> nginx\n<span class=\"hljs-attr\">        image:<\/span> nginx:stable\n<span class=\"hljs-attr\">        ports:<\/span>\n<span class=\"hljs-attr\">        - containerPort:<\/span> <span class=\"hljs-number\">80<\/span>\n<span class=\"hljs-meta\">---<\/span>\n<span class=\"hljs-attr\">kind:<\/span> Service\n<span class=\"hljs-attr\">apiVersion:<\/span> v1\n<span class=\"hljs-attr\">metadata:<\/span>\n<span class=\"hljs-attr\">  name:<\/span> nginx-public-ip\n<span class=\"hljs-attr\">  annotations:<\/span>\n    service.beta.kubernetes.io\/openstack-internal-load-balancer: <span class=\"hljs-string\">\"false\"<\/span>\n<span class=\"hljs-attr\">spec:<\/span>\n<span class=\"hljs-attr\">  selector:<\/span>\n<span class=\"hljs-attr\">    app:<\/span> nginx <span class=\"hljs-comment\"># the name is defined in nginx-deployment.yaml<\/span>\n<span class=\"hljs-attr\">  type:<\/span> LoadBalancer\n<span class=\"hljs-attr\">  ports:<\/span>\n<span class=\"hljs-attr\">  - name:<\/span> http\n<span class=\"hljs-attr\">    port:<\/span> <span class=\"hljs-number\">80<\/span>\n<span class=\"hljs-attr\">    targetPort:<\/span> <span class=\"hljs-number\">80<\/span>\n<span class=\"hljs-attr\">  ipFamilyPolicy:<\/span> SingleStack\n<span class=\"hljs-attr\">  ipFamilies:<\/span>\n<span class=\"hljs-bullet\">  -<\/span> IPv4\n<\/code><\/pre>\nIt will spin up an NGINX and expose this service via a public IP on Port 80 to the internet.\n\nFinally deploy it!\n\n&nbsp;\n<pre><code>$ kubectl apply -f apps\/nginx-deployment<span class=\"hljs-selector-class\">.yaml<\/span> \ndeployment.apps\/nginx-deployment created\n<\/code><\/pre>\nGet the public IP to access the deployed NGINX server. The <code>EXTERNAL-IP<\/code> column contains the IP.\n\n&nbsp;\n<pre><code>$ kubectl get svc nginx-<span class=\"hljs-meta\">public<\/span>-<span class=\"hljs-built_in\">ip<\/span> \nNAME              TYPE           CLUSTER-<span class=\"hljs-built_in\">IP<\/span>      EXTERNAL-<span class=\"hljs-built_in\">IP<\/span>       PORT(S)        AGE\nnginx-<span class=\"hljs-meta\">public<\/span>-<span class=\"hljs-built_in\">ip<\/span>   LoadBalancer   <span class=\"hljs-number\">10.104<\/span><span class=\"hljs-meta\">.145<\/span><span class=\"hljs-meta\">.27<\/span>   <span class=\"hljs-number\">185.128<\/span><span class=\"hljs-meta\">.117<\/span><span class=\"hljs-meta\">.101<\/span>   <span class=\"hljs-number\">80<\/span>:<span class=\"hljs-number\">30541<\/span>\/TCP   80s\n<\/code><\/pre>\nIf things work out you can add them to <code>git<\/code> to follow the infrastructure as code approach e.g. by:\n\n&nbsp;\n<pre><code>git <span class=\"hljs-keyword\">add<\/span><span class=\"bash\"> .\n<\/span>git commit -am <span class=\"hljs-string\">\"Deploy NGINX\"<\/span>\n<\/code><\/pre>\n<h3 id=\"test-your-web-server\">Test your web server<\/h3>\n&nbsp;\n\nSimply use your browser to access the public IP or:\n<pre><code>$ curl 185.128.117.101\n<span class=\"hljs-meta\">&lt;!DOCTYPE html&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">html<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>Welcome to nginx!<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">style<\/span>&gt;<\/span><span class=\"css\">\n    <span class=\"hljs-selector-tag\">body<\/span> {\n        <span class=\"hljs-attribute\">width<\/span>: <span class=\"hljs-number\">35em<\/span>;\n        <span class=\"hljs-attribute\">margin<\/span>: <span class=\"hljs-number\">0<\/span> auto;\n        <span class=\"hljs-attribute\">font-family<\/span>: Tahoma, Verdana, Arial, sans-serif;\n    }\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">style<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h1<\/span>&gt;<\/span>Welcome to nginx!<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h1<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>If you see this page, the nginx web server is successfully installed and\nworking. Further configuration is required.<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span>For online documentation and support please refer to\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"http:\/\/nginx.org\/\"<\/span>&gt;<\/span>nginx.org<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>.<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">br<\/span>\/&gt;<\/span>\nCommercial support is available at\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"http:\/\/nginx.com\/\"<\/span>&gt;<\/span>nginx.com<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>.<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">p<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">em<\/span>&gt;<\/span>Thank you for using nginx.<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">em<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">p<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/span>\n<\/code><\/pre>\n<h3 id=\"enjoy-your-cluster-\">Enjoy your cluster!<\/h3>\n&nbsp;\n\nTo tear down your cluster, you can run:\n\n&nbsp;\n<pre><code><span class=\"hljs-attr\">MANAGED_K8S_RELEASE_THE_KRAKEN<\/span>=<span class=\"hljs-literal\">true<\/span> managed-k8s\/actions\/destroy.sh\n<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Learn how to spin up a k8s cluster in order to run an NGINX<\/p>","protected":false},"author":2,"featured_media":5376,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","inline_featured_image":false,"footnotes":""},"categories":[83,26,80],"tags":[],"class_list":["post-5373","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-services","category-kubernetes","category-yaook"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to offer an NGINX webserver using Yaook Kubernetes (yk8s)<\/title>\n<meta name=\"description\" content=\"Cloud&amp;Heat | Blog | How to offer an NGINX webserver using Yaook Kubernetes (yk8s) by Cloud&amp;Heat and Schwarz IT\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cloudandheat.com\/en\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)\" \/>\n<meta property=\"og:description\" content=\"Cloud&amp;Heat | Blog | How to offer an NGINX webserver using Yaook Kubernetes (yk8s) by Cloud&amp;Heat and Schwarz IT\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cloudandheat.com\/en\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloud &amp; Heat\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/CloudandHeat\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-02T08:27:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-08T15:04:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png\" \/>\n\t<meta property=\"og:image:width\" content=\"980\" \/>\n\t<meta property=\"og:image:height\" content=\"657\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Clemens M\u00fcller\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cloudandheat\" \/>\n<meta name=\"twitter:site\" content=\"@cloudandheat\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Clemens M\u00fcller\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/\"},\"author\":{\"name\":\"Clemens M\u00fcller\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a\"},\"headline\":\"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)\",\"datePublished\":\"2022-06-02T08:27:47+00:00\",\"dateModified\":\"2023-03-08T15:04:01+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/\"},\"wordCount\":1235,\"publisher\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png\",\"articleSection\":[\"Cloud Services\",\"Kubernetes\",\"Yaook\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/\",\"url\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/\",\"name\":\"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)\",\"isPartOf\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png\",\"datePublished\":\"2022-06-02T08:27:47+00:00\",\"dateModified\":\"2023-03-08T15:04:01+00:00\",\"description\":\"Cloud&Heat | Blog | How to offer an NGINX webserver using Yaook Kubernetes (yk8s) by Cloud&Heat and Schwarz IT\",\"breadcrumb\":{\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#primaryimage\",\"url\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png\",\"contentUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png\",\"width\":980,\"height\":657},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.cloudandheat.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cloudandheat.com\/#website\",\"url\":\"https:\/\/www.cloudandheat.com\/\",\"name\":\"Cloud & Heat Technolgies GmbH\",\"description\":\"Cloud-Service- und Cloud-Technologie-Provider\",\"publisher\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#organization\"},\"alternateName\":\"Cloud and Heat Technologies GmbH\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.cloudandheat.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.cloudandheat.com\/#organization\",\"name\":\"Cloud&Heat Technologies GmbH\",\"url\":\"https:\/\/www.cloudandheat.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2022\/08\/logo.svg\",\"contentUrl\":\"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2022\/08\/logo.svg\",\"width\":907,\"height\":1782,\"caption\":\"Cloud&Heat Technologies GmbH\"},\"image\":{\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/CloudandHeat\",\"https:\/\/x.com\/cloudandheat\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a\",\"name\":\"Clemens M\u00fcller\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.cloudandheat.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/350f97f507a0c231669ebf507b516e705ead54569fde6f8537dee0acc251ee2d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/350f97f507a0c231669ebf507b516e705ead54569fde6f8537dee0acc251ee2d?s=96&d=mm&r=g\",\"caption\":\"Clemens M\u00fcller\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)","description":"Cloud&amp;Heat | Blog | How to offer an NGINX webserver using Yaook Kubernetes (yk8s) by Cloud&amp;Heat and Schwarz IT","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.cloudandheat.com\/en\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/","og_locale":"en_GB","og_type":"article","og_title":"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)","og_description":"Cloud&Heat | Blog | How to offer an NGINX webserver using Yaook Kubernetes (yk8s) by Cloud&Heat and Schwarz IT","og_url":"https:\/\/www.cloudandheat.com\/en\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/","og_site_name":"Cloud &amp; Heat","article_publisher":"https:\/\/www.facebook.com\/CloudandHeat","article_published_time":"2022-06-02T08:27:47+00:00","article_modified_time":"2023-03-08T15:04:01+00:00","og_image":[{"width":980,"height":657,"url":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png","type":"image\/png"}],"author":"Clemens M\u00fcller","twitter_card":"summary_large_image","twitter_creator":"@cloudandheat","twitter_site":"@cloudandheat","twitter_misc":{"Written by":"Clemens M\u00fcller"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#article","isPartOf":{"@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/"},"author":{"name":"Clemens M\u00fcller","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a"},"headline":"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)","datePublished":"2022-06-02T08:27:47+00:00","dateModified":"2023-03-08T15:04:01+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/"},"wordCount":1235,"publisher":{"@id":"https:\/\/www.cloudandheat.com\/#organization"},"image":{"@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png","articleSection":["Cloud Services","Kubernetes","Yaook"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/","url":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/","name":"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)","isPartOf":{"@id":"https:\/\/www.cloudandheat.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#primaryimage"},"image":{"@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png","datePublished":"2022-06-02T08:27:47+00:00","dateModified":"2023-03-08T15:04:01+00:00","description":"Cloud&amp;Heat | Blog | How to offer an NGINX webserver using Yaook Kubernetes (yk8s) by Cloud&amp;Heat and Schwarz IT","breadcrumb":{"@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#primaryimage","url":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png","contentUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2023\/01\/2022-Cloud-and-Heat-YAOOK-start-Teaser.png","width":980,"height":657},{"@type":"BreadcrumbList","@id":"https:\/\/www.cloudandheat.com\/how-to-offer-an-nginx-webserver-using-yaook-kubernetes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.cloudandheat.com\/"},{"@type":"ListItem","position":2,"name":"How to offer an NGINX webserver using Yaook Kubernetes (yk8s)"}]},{"@type":"WebSite","@id":"https:\/\/www.cloudandheat.com\/#website","url":"https:\/\/www.cloudandheat.com\/","name":"Cloud &amp; Heat Technolgies GmbH","description":"Cloud service and cloud technology providers","publisher":{"@id":"https:\/\/www.cloudandheat.com\/#organization"},"alternateName":"Cloud and Heat Technologies GmbH","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cloudandheat.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.cloudandheat.com\/#organization","name":"Cloud&amp;Heat Technologies GmbH","url":"https:\/\/www.cloudandheat.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2022\/08\/logo.svg","contentUrl":"https:\/\/www.cloudandheat.com\/wp-content\/uploads\/2022\/08\/logo.svg","width":907,"height":1782,"caption":"Cloud&Heat Technologies GmbH"},"image":{"@id":"https:\/\/www.cloudandheat.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/CloudandHeat","https:\/\/x.com\/cloudandheat"]},{"@type":"Person","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/person\/ba09b0c184d05469ca875d2cb5ba730a","name":"Clemens M\u00fcller","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.cloudandheat.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/350f97f507a0c231669ebf507b516e705ead54569fde6f8537dee0acc251ee2d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/350f97f507a0c231669ebf507b516e705ead54569fde6f8537dee0acc251ee2d?s=96&d=mm&r=g","caption":"Clemens M\u00fcller"}}]}},"_links":{"self":[{"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/posts\/5373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/comments?post=5373"}],"version-history":[{"count":0,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/posts\/5373\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/media\/5376"}],"wp:attachment":[{"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/media?parent=5373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/categories?post=5373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudandheat.com\/en\/wp-json\/wp\/v2\/tags?post=5373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}