---
title: "ConfigMapy, secrety a sieť — Kubernetes API for Laravel | Roundly"
description: "Pomocníci pre dáta ConfigMap a Secret, TLS secrety jedným volaním, služby, ingressy a sieťové politiky so správnymi selektormi „vyber všetko“."
url: https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel/configmapy-secrety-a-siet
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Kubernetes API for Laravel](https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel.md)

# ConfigMapy, secrety a sieť

## ConfigMapy

```php
$cluster->configMaps()
    ->setNamespace('shop')
    ->setName('checkout-config')
    ->setData([
        'APP_ENV' => 'production',
        'nginx.conf' => $nginxConfig,
    ])
    ->create();

$config = $cluster->configMaps()->setNamespace('shop')->withName('checkout-config')->find();

$config->getData();                    // the whole map
$config->getData('nginx.conf');        // one key
$config->getData('MISSING', 'n/a');    // with a default

$config->addData('LOG_LEVEL', 'debug')
    ->removeData('APP_ENV')
    ->update();
```

Kľúče dát sú názvy súborov — nginx.conf, app.env —, preto ich getData(), addData() aj removeData() vždy berú ako ploché kľúče, nikdy ako bodkové cesty atribútov. getData('0') prečíta položku "0"; celú mapu vráti len kľúč null. Mapa sa vždy zakóduje ako JSON objekt, aj s číselnými kľúčmi, a setData(\[\]) či odstránenie posledného kľúča pole data úplne vynechá — prázdna mapa by sa zakódovala ako JSON zoznam \[\], ktorý apiserver odmietne.

## Secrety

Secret::setData() a addData() hodnoty za vás zakódujú do base64 a getData() ich dekóduje, takže vždy pracujete s obyčajnými reťazcami. Kľúče ako tls.crt či .dockerconfigjson ostávajú ploché:

```php
$cluster->secrets()
    ->setNamespace('shop')
    ->setName('checkout-db')
    ->setData(['username' => 'checkout', 'password' => $password])   // base64-encoded for you
    ->create();

$secret = $cluster->secrets()->setNamespace('shop')->withName('checkout-db')->find();

$secret->getData('password');          // the decoded plain string
$secret->getData();                    // every key, decoded
$secret->addData('host', 'db.shop.svc.cluster.local')->update();
```

## TLS secrety s certifikátom

Secret podporuje typované pole type a pomocníka pre TLS, ktorý PEM certifikát a kľúč zakóduje do base64 v secrete kubernetes.io/tls — pripravenom pre ingress alebo TLSStore Traefiku:

```php
$secret = $cluster->secrets()
    ->setNamespace('default')
    ->setName('wildcard-tls')
    ->asTlsCertificate($pemCertificate, $pemPrivateKey)   // sets type + data['tls.crt'] / data['tls.key']
    ->create();

$secret->getType();              // "kubernetes.io/tls"
$secret->getData('tls.crt');     // the decoded PEM certificate

// Or set an arbitrary Secret type explicitly:
$cluster->secrets()->setName('dockercfg')->setType('kubernetes.io/dockerconfigjson');
```

## Služby

```php
use RoundlyConsulting\KubernetesApi\Resources\Types\Port;

$cluster->services()
    ->setNamespace('shop')
    ->setName('checkout')
    ->setType('ClusterIP')
    ->setSelectors(['app' => 'checkout'])
    ->addPort(Port::http(8080)->setName('http'))     // port 80 -> targetPort 8080, TCP
    ->addPort(Port::make()->setName('metrics')->setProtocol('TCP')->setPort(9090)->setTargetPort(9090))
    ->create();

$service = $cluster->services()->setNamespace('shop')->withName('checkout')->find();

$service->getClusterDns();      // checkout.shop.svc.cluster.local
$service->getType();            // 'ClusterIP'
$service->getPorts();           // Port[]
$service->getSelectors();       // ['app' => 'checkout']

// A LoadBalancer that keeps client source IPs
$cluster->services()
    ->setNamespace('shop')
    ->setName('checkout-public')
    ->setType('LoadBalancer')
    ->useLocalTrafficPolicy()                        // externalTrafficPolicy: Local
    ->setSelectors(['app' => 'checkout'])
    ->addPort(Port::http(8080)->setName('http'))
    ->create();
```

## Ingressy

addRule() jedným volaním zapíše host, cestu aj cieľovú službu; addTls() priradí zoznamu hostov secret s certifikátom:

```php
$cluster->ingresses()
    ->setNamespace('shop')
    ->setName('checkout')
    ->setIngressClassName('nginx')
    ->addRule('shop.example.com', '/', 'checkout', 80)             // pathType defaults to Prefix
    ->addRule('shop.example.com', '/api', 'checkout-api', 8080, 'Prefix')
    ->addTls(['shop.example.com'], 'wildcard-tls')
    ->create();

$ingress = $cluster->ingresses()->setNamespace('shop')->withName('checkout')->find();
$ingress->getRules();
$ingress->getTls();
$ingress->getLoadBalancerIngress();   // status.loadBalancer.ingress
```

## Sieťové politiky a „vyber všetko“

Prázdny label selektor v Kubernetes znamená „vyber všetko“ a musí sa poslať ako prázdny objekt {}, nie \[\] — to apiserver odmietne. Settery selektorov to riešia za vás, takže prázdne pole sa serializuje správne:

```php
// Default-deny / select-all: an empty podSelector matches every pod in the namespace.
$cluster->networkPolicies()
    ->setNamespace('shop')
    ->setName('default-deny')
    ->setPodSelector([])           // serialises to "podSelector": {}
    ->setPolicyTypes(['Ingress'])
    ->create();

// Then allow the ingress namespace to reach checkout on 8080.
$cluster->networkPolicies()
    ->setNamespace('shop')
    ->setName('allow-ingress-to-checkout')
    ->setPodSelector(['app' => 'checkout'])          // podSelector.matchLabels
    ->setPolicyTypes(['Ingress'])
    ->addIngressRule([
        'from' => [['namespaceSelector' => ['matchLabels' => ['kubernetes.io/metadata.name' => 'ingress']]]],
        'ports' => [['protocol' => 'TCP', 'port' => 8080]],
    ])
    ->create();
```

Service::setSelectors(\[\]) sa serializuje rovnako. Selektory podov pri workloadoch sú iné: prázdny selektor apiserver pri workloadoch apps/v1 (Deployment, ReplicaSet, StatefulSet, DaemonSet) odmietne, preto im vždy dajte aspoň jeden label, napríklad setPodsSelectors(\['app' => 'checkout'\]). Každý ďalší uzol, ktorý musí byť prázdnym objektom, nastavte na RoundlyConsulting\\KubernetesApi\\Resources\\Types\\EmptyObject — serializuje sa vždy na {}.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel.md)
