Vytvoření kontroleru příchozího přenosu dat HTTPS Azure Kubernetes Service (AKS)
Kontroler příchozích dat je software, který poskytuje reverzní proxy server, konfigurovatelné směrování provozu a ukončení protokolu TLS pro služby Kubernetes. Prostředky příchozího přenosu dat Kubernetes se používají ke konfiguraci pravidel příchozího přenosu dat a tras pro jednotlivé služby Kubernetes. Pomocí kontroleru příchozího přenosu dat a pravidel příchozího přenosu dat je možné jednu IP adresu použít ke směrování provozu do několika služeb v clusteru Kubernetes.
Tento článek ukazuje, jak nasadit kontroler příchozího přenosu dat NGINX v clusteru Azure Kubernetes Service (AKS). Projekt cert-manager slouží k automatickému generování a konfiguraci certifikátů Let's Encrypt. Nakonec se v clusteru AKS spustí dvě aplikace, z nichž každá je přístupná přes jednu IP adresu.
Můžete také:
- Vytvoření základního kontroleru příchozího přenosu dat s externím připojením k síti
- Povolení doplňku pro směrování aplikace HTTP
- Vytvoření kontroleru příchozího přenosu dat, který používá interní privátní síť a IP adresu
- Vytvoření kontroleru příchozího přenosu dat, který používá vlastní certifikáty TLS
- Vytvoření kontroleru příchozího přenosu dat, který používá Let's Encrypt k automatickému generování certifikátů TLS se statickou veřejnou IP adresou
Než začnete
Tento článek předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, prohlédněte si rychlý start pro AKS s využitím Azure CLI Azure PowerShell nebo s využitím Azure Portal.
Tento článek také předpokládá, že máte vlastní doménu se zónou DNS ve stejné skupině prostředků jako cluster AKS.
Tento článek používá Helm 3 k instalaci kontroleru příchozího přenosu dat NGINX na podporovanou verzi Kubernetes. Ujistěte se, že používáte nejnovější verzi Helmu a že máte přístup k ingress-nginx úložišti jetstack a Helm. Kroky popsané v tomto článku nemusí být kompatibilní s předchozími verzemi chartu Helm, kontroleru příchozího přenosu dat NGINX nebo Kubernetes.
Další informace o konfiguraci a používání Nástroje Helm najdete v tématu Instalace aplikací pomocí nástroje Helm v Azure Kubernetes Service (AKS). Pokyny k upgradu najdete v tématu Dokumentace k instalaci Helmu.
Kromě toho tento článek předpokládá, že máte existující cluster AKS s integrovaným ACR. Další podrobnosti o vytvoření clusteru AKS s integrovaným ACR najdete v tématu Ověřování pomocí Azure Container Registry z Azure Kubernetes Service.
Tento článek také vyžaduje použití Azure CLI verze 2.0.64 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.
Import imagí používaných chartem Helm do ACR
Tento článek používá chart Helm kontroleru příchozího přenosu dat NGINX,který spoléhá na tři image kontejneru.
Pomocí az acr import naimportujte tyto image do ACR.
REGISTRY_NAME=<REGISTRY_NAME>
SOURCE_REGISTRY=k8s.gcr.io
CONTROLLER_IMAGE=ingress-nginx/controller
CONTROLLER_TAG=v1.0.4
PATCH_IMAGE=ingress-nginx/kube-webhook-certgen
PATCH_TAG=v1.1.1
DEFAULTBACKEND_IMAGE=defaultbackend-amd64
DEFAULTBACKEND_TAG=1.5
CERT_MANAGER_REGISTRY=quay.io
CERT_MANAGER_TAG=v1.5.4
CERT_MANAGER_IMAGE_CONTROLLER=jetstack/cert-manager-controller
CERT_MANAGER_IMAGE_WEBHOOK=jetstack/cert-manager-webhook
CERT_MANAGER_IMAGE_CAINJECTOR=jetstack/cert-manager-cainjector
az acr import --name $REGISTRY_NAME --source $SOURCE_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG
az acr import --name $REGISTRY_NAME --source $SOURCE_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG
az acr import --name $REGISTRY_NAME --source $SOURCE_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG
az acr import --name $REGISTRY_NAME --source $CERT_MANAGER_REGISTRY/$CERT_MANAGER_IMAGE_CONTROLLER:$CERT_MANAGER_TAG --image $CERT_MANAGER_IMAGE_CONTROLLER:$CERT_MANAGER_TAG
az acr import --name $REGISTRY_NAME --source $CERT_MANAGER_REGISTRY/$CERT_MANAGER_IMAGE_WEBHOOK:$CERT_MANAGER_TAG --image $CERT_MANAGER_IMAGE_WEBHOOK:$CERT_MANAGER_TAG
az acr import --name $REGISTRY_NAME --source $CERT_MANAGER_REGISTRY/$CERT_MANAGER_IMAGE_CAINJECTOR:$CERT_MANAGER_TAG --image $CERT_MANAGER_IMAGE_CAINJECTOR:$CERT_MANAGER_TAG
Poznámka
Kromě importu imagí kontejnerů do ACR můžete do ACR importovat také grafy Helm. Další informace najdete v tématu Nabízení a stažení grafů Helm do registru kontejneru Azure.
Vytvoření kontroleru příchozího přenosu dat
K vytvoření kontroleru příchozího přenosu dat helm použijte příkaz k instalaci nginx-ingress. Pro přidání redundance se nasadí dvě repliky kontrolerů příchozího přenosu dat NGINX s parametrem --set controller.replicaCount. Pokud chcete plně využít výhod spouštění replik kontroleru příchozího přenosu dat, ujistěte se, že je v clusteru AKS více než jeden uzel.
Kontroler příchozího přenosu dat je potřeba naplánovat také v uzlu Linuxu. V uzlech Windows Serveru by se kontroler příchozího přenosu dat neměl spouštět. Selektor uzlů se specifikuje pomocí parametru --set nodeSelector, aby plánovači Kubernetes oznámil, že má spustit kontroler příchozího přenosu dat NGINX v uzlu Linuxu.
Tip
Následující příklad vytvoří obor názvů Kubernetes pro prostředky příchozího přenosu dat s názvem ingress-basic a je určený k práci v tomto oboru názvů. Podle potřeby zadejte obor názvů pro vlastní prostředí.
Tip
Pokud chcete pro požadavky na kontejnery v clusteru povolit zachování zdrojové IP adresy klienta, přidejte do příkazu Helm --set controller.service.externalTrafficPolicy=Local install . Zdrojová IP adresa klienta je uložená v hlavičce požadavku v části X-Forwarded-For. Při použití kontroleru příchozího přenosu dat s povolenou zachováním zdrojové IP adresy klienta nebude průchod TLS fungovat.
# Add the ingress-nginx repository
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
# Set variable for ACR location to use for pulling images
ACR_URL=<REGISTRY_URL>
# Use Helm to deploy an NGINX ingress controller
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace ingress-basic --create-namespace \
--set controller.replicaCount=2 \
--set controller.nodeSelector."kubernetes\.io/os"=linux \
--set controller.image.registry=$ACR_URL \
--set controller.image.image=$CONTROLLER_IMAGE \
--set controller.image.tag=$CONTROLLER_TAG \
--set controller.image.digest="" \
--set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
--set controller.admissionWebhooks.patch.image.registry=$ACR_URL \
--set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \
--set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \
--set controller.admissionWebhooks.patch.image.digest="" \
--set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
--set defaultBackend.image.registry=$ACR_URL \
--set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \
--set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \
--set defaultBackend.image.digest=""
Během instalace se vytvoří veřejná IP adresa Azure pro kontroler příchozího přenosu dat. Tato veřejná IP adresa je statická po dobu životnosti kontroleru příchozího přenosu dat. Pokud odstraníte kontroler příchozího přenosu dat, přiřazení veřejné IP adresy se ztratí. Pokud pak vytvoříte další kontroler příchozího přenosu dat, přiřadí se nová veřejná IP adresa. Pokud chcete zachovat použití veřejné IP adresy, můžete místo toho vytvořit kontroler příchozího přenosu dat se statickou veřejnou IP adresou.
Veřejnou IP adresu získáte pomocí kubectl get service příkazu . Přiřazení IP adresy ke službě trvá několik minut.
$ kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-ingress-ingress-nginx-controller LoadBalancer 10.0.74.133 EXTERNAL_IP 80:32486/TCP,443:30953/TCP 44s app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
Zatím nebyla vytvořena žádná pravidla příchozího přenosu dat. Pokud vyhledáte veřejnou IP adresu, zobrazí se výchozí stránka 404 kontroleru příchozího přenosu dat NGINX.
Přidání záznamu A do zóny DNS
Pomocí příkazu az network dns record-set a add-recordpřidejte do zóny DNS záznam A s externí IP adresou služby NGINX.
az network dns record-set a add-record \
--resource-group myResourceGroup \
--zone-name MY_CUSTOM_DOMAIN \
--record-set-name "*" \
--ipv4-address MY_EXTERNAL_IP
Konfigurace plně kvalifikovaných názvu domény pro kontroler příchozího přenosu dat
Volitelně můžete místo vlastní domény nakonfigurovat plně kvalifikovaný název domény pro IP adresu řadiče příchozího přenosu dat. Plně kvalifikovaný název domény bude ve formátu <CUSTOM LABEL>.<AZURE REGION NAME>.cloudapp.azure.com .
Pro tuto konfiguraci jsou popsané dvě metody:
Metoda 1: Nastavení popisku DNS pomocí Azure CLI
Všimněte si, že tato ukázka je pro prostředí Bash.
# Public IP address of your ingress controller
IP="MY_EXTERNAL_IP"
# Name to associate with public IP address
DNSNAME="demo-aks-ingress"
# Get the resource-id of the public ip
PUBLICIPID=$(az network public-ip list --query "[?ipAddress!=null]|[?contains(ipAddress, '$IP')].[id]" --output tsv)
# Update public ip address with DNS name
az network public-ip update --ids $PUBLICIPID --dns-name $DNSNAME
# Display the FQDN
az network public-ip show --ids $PUBLICIPID --query "[dnsSettings.fqdn]" --output tsv
Metoda 2: Nastavení popisku DNS pomocí nastavení chartu Helm
Nastavení poznámek můžete předat konfiguraci chartu Helm pomocí --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name" parametru . To se může nastavit buď při prvním nasazení kontroleru příchozího přenosu dat, nebo při jeho konfiguraci později.
Následující příklad ukazuje, jak toto nastavení aktualizovat po nasazení kontroleru.
DNS_LABEL="demo-aks-ingress"
NAMESPACE="nginx-basic"
helm upgrade ingress-nginx ingress-nginx/ingress-nginx \
--namespace $NAMESPACE \
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-dns-label-name"=$DNS_LABEL
Instalace nástroje cert-manager
Kontroler příchozího přenosu dat NGINX podporuje ukončení protokolu TLS. Existuje několik způsobů, jak načíst a nakonfigurovat certifikáty pro protokol HTTPS. Tento článek ukazuje použití nástroje cert-manager,který poskytuje automatické generování a správu certifikátů Lets Encrypt.
Instalace kontroleru cert-manager:
# Label the ingress-basic namespace to disable resource validation
kubectl label namespace ingress-basic cert-manager.io/disable-validation=true
# Add the Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io
# Update your local Helm chart repository cache
helm repo update
# Install the cert-manager Helm chart
helm install cert-manager jetstack/cert-manager \
--namespace ingress-basic \
--version $CERT_MANAGER_TAG \
--set installCRDs=true \
--set nodeSelector."kubernetes\.io/os"=linux \
--set image.repository=$ACR_URL/$CERT_MANAGER_IMAGE_CONTROLLER \
--set image.tag=$CERT_MANAGER_TAG \
--set webhook.image.repository=$ACR_URL/$CERT_MANAGER_IMAGE_WEBHOOK \
--set webhook.image.tag=$CERT_MANAGER_TAG \
--set cainjector.image.repository=$ACR_URL/$CERT_MANAGER_IMAGE_CAINJECTOR \
--set cainjector.image.tag=$CERT_MANAGER_TAG
Další informace o konfiguraci nástroje cert-manager najdete v projektu cert-manager.
Vytvoření vystavitele clusteru certifikační autority
Před vydáním certifikátů vyžaduje nástroj cert-manager prostředek Vystavitel nebo ClusterIssuer. Tyto prostředky Kubernetes mají stejné funkce, ale fungují v jednom oboru názvů Issuer a fungují ve všech ClusterIssuer oborech názvů. Další informace najdete v dokumentaci vystavitele nástroje cert-manager.
Pomocí následujícího příkladu manifestu vytvořte cluster-issuer.yaml vystavitele clusteru, například . Aktualizujte e-mailovou adresu platnou adresou z vaší organizace:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: MY_EMAIL_ADDRESS
privateKeySecretRef:
name: letsencrypt
solvers:
- http01:
ingress:
class: nginx
podTemplate:
spec:
nodeSelector:
"kubernetes.io/os": linux
Vystavitele vytvoříte pomocí kubectl apply příkazu .
kubectl apply -f cluster-issuer.yaml
Spouštění ukázkových aplikací
Nakonfigurovali jste kontroler příchozího přenosu dat a řešení správy certifikátů. Teď v clusteru AKS spustíme dvě ukázkové aplikace. V tomto příkladu se Helm používá k nasazení dvou instancí jednoduché aplikace Hello World.
Pokud chcete zobrazit kontroler příchozího přenosu dat v akci, spusťte v clusteru AKS dvě ukázkové aplikace. V tomto příkladu použijete k nasazení dvou instancí jednoduché kubectl apply aplikace Hello World.
Vytvořte soubor aks-helloworld-one.yaml a zkopírujte ho v následujícím příkladu YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: aks-helloworld-one
spec:
replicas: 1
selector:
matchLabels:
app: aks-helloworld-one
template:
metadata:
labels:
app: aks-helloworld-one
spec:
containers:
- name: aks-helloworld-one
image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
ports:
- containerPort: 80
env:
- name: TITLE
value: "Welcome to Azure Kubernetes Service (AKS)"
---
apiVersion: v1
kind: Service
metadata:
name: aks-helloworld-one
spec:
type: ClusterIP
ports:
- port: 80
selector:
app: aks-helloworld-one
Vytvořte soubor aks-helloworld-two.yaml a zkopírujte ho v následujícím příkladu YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: aks-helloworld-two
spec:
replicas: 1
selector:
matchLabels:
app: aks-helloworld-two
template:
metadata:
labels:
app: aks-helloworld-two
spec:
containers:
- name: aks-helloworld-two
image: mcr.microsoft.com/azuredocs/aks-helloworld:v1
ports:
- containerPort: 80
env:
- name: TITLE
value: "AKS Ingress Demo"
---
apiVersion: v1
kind: Service
metadata:
name: aks-helloworld-two
spec:
type: ClusterIP
ports:
- port: 80
selector:
app: aks-helloworld-two
Spusťte dvě ukázkové aplikace pomocí kubectl apply příkazu :
kubectl apply -f aks-helloworld-one.yaml --namespace ingress-basic
kubectl apply -f aks-helloworld-two.yaml --namespace ingress-basic
Vytvoření trasy příchozího přenosu dat
Obě aplikace jsou teď spuštěné v clusteru Kubernetes. Jsou ale nakonfigurované pomocí služby typu a nejsou přístupné ClusterIP z internetu. Pokud je chcete veřejně používat, vytvořte prostředek příchozího přenosu dat Kubernetes. Prostředek příchozího přenosu dat nakonfiguruje pravidla, která směruje provoz do jedné ze dvou aplikací.
V následujícím příkladu se provoz na adresu hello-world-ingress. MY_CUSTOM_DOMAIN se směruje do služby aks-helloworld-one. Provoz na adresu hello-world-ingress. MY_CUSTOM_DOMAIN/hello-world-two je směrován do služby aks-helloworld-two. Provoz do příchozího přenosu dat hello-world. MY_CUSTOM_DOMAIN/static se pro statické prostředky směruje do služby s názvem aks-helloworld-one.
Poznámka
Pokud jste nakonfigurovali plně kvalifikovaný název domény pro IP adresu řadiče příchozího přenosu dat místo vlastní domény, použijte plně kvalifikovaný název domény místo hello-world-ingress. MY_CUSTOM_DOMAIN. Pokud je například plně kvalifikovaný název domény demo-aks-ingress.eastus.cloudapp.azure.com , nahraďte hello-world-ingress. MY_CUSTOM_DOMAIN s demo-aks-ingress.eastus.cloudapp.azure.com v hello-world-ingress.yaml .
Vytvořte soubor s názvem hello-world-ingress.yaml pomocí následujícího příkladu YAML. Aktualizujte hostitele a hostitele na název DNS, který jste vytvořili v předchozím kroku.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/use-regex: "true"
cert-manager.io/cluster-issuer: letsencrypt
spec:
tls:
- hosts:
- hello-world-ingress.MY_CUSTOM_DOMAIN
secretName: tls-secret
rules:
- host: hello-world-ingress.MY_CUSTOM_DOMAIN
http:
paths:
- path: /hello-world-one(/|$)(.*)
pathType: Prefix
backend:
service:
name: aks-helloworld-one
port:
number: 80
- path: /hello-world-two(/|$)(.*)
pathType: Prefix
backend:
service:
name: aks-helloworld-two
port:
number: 80
- path: /(.*)
pathType: Prefix
backend:
service:
name: aks-helloworld-one
port:
number: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hello-world-ingress-static
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /static/$2
nginx.ingress.kubernetes.io/use-regex: "true"
cert-manager.io/cluster-issuer: letsencrypt
spec:
tls:
- hosts:
- hello-world-ingress.MY_CUSTOM_DOMAIN
secretName: tls-secret
rules:
- host: hello-world-ingress.MY_CUSTOM_DOMAIN
http:
paths:
- path:
pathType: Prefix
backend:
service:
name: aks-helloworld-one
port:
number: 80
path: /static(/|$)(.*)
Pomocí příkazu vytvořte prostředek příchozího kubectl apply přenosu dat.
kubectl apply -f hello-world-ingress.yaml --namespace ingress-basic
Ověření vytvoření objektu certifikátu
Dále je nutné vytvořit prostředek certifikátu. Prostředek certifikátu definuje požadovaný certifikát X.509. Další informace najdete v tématu certifikáty nástroje cert-manager. Nástroj Cert-manager pro vás automaticky vytvořil objekt certifikátu pomocí ingress-shim, který se automaticky nasazovat pomocí nástroje cert-manager od v0.2.2. Další informace najdete v dokumentaci k ingress-shim.
Pokud chcete ověřit úspěšné vytvoření certifikátu, použijte příkaz a ověřte, že kubectl get certificate --namespace ingress-basic je připraveno na hodnotu True, což může trvat několik minut.
$ kubectl get certificate --namespace ingress-basic
NAME READY SECRET AGE
tls-secret True tls-secret 11m
Testování konfigurace příchozího přenosu dat
Otevřete webový prohlížeč s příchozím přenosem dat hello-world-ingress. MY_CUSTOM_DOMAIN kontroleru příchozího přenosu dat Kubernetes. Všimněte si, že jste přesměrováni na použití protokolu HTTPS a certifikát je důvěryhodný a ukázková aplikace se zobrazí ve webovém prohlížeči. Přidejte cestu /hello-world-two a všimněte si, že se zobrazí druhá ukázková aplikace s vlastním názvem.
Vyčištění prostředků
Tento článek používal Helm k instalaci komponent příchozího přenosu dat, certifikátů a ukázkových aplikací. Když nasadíte chart Helm, vytvoří se několik prostředků Kubernetes. Tyto prostředky zahrnují pody, nasazení a služby. Pokud chcete tyto prostředky vyčistit, můžete odstranit celý ukázkový obor názvů nebo jednotlivé prostředky.
Odstranění ukázkového oboru názvů a všech prostředků
Pokud chcete odstranit celý ukázkový obor názvů, použijte kubectl delete příkaz a zadejte název oboru názvů. Odstraní se všechny prostředky v oboru názvů .
kubectl delete namespace ingress-basic
Odstranění prostředků jednotlivě
Případně je podrobnějším přístupem odstranění jednotlivých vytvořených prostředků. Nejprve odeberte prostředky vystavitele clusteru:
kubectl delete -f cluster-issuer.yaml --namespace ingress-basic
Vy list the Helm releases with the command (Vy listovat verze Helmu) helm list pomocí příkazu . Vyhledejte grafy s názvem nginx a cert-manager, jak je znázorněno v následujícím příkladu výstupu:
$ helm list --namespace ingress-basic
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
cert-manager ingress-basic 1 2020-01-15 10:23:36.515514 -0600 CST deployed cert-manager-v0.13.0 v0.13.0
nginx ingress-basic 1 2020-01-15 10:09:45.982693 -0600 CST deployed nginx-ingress-1.29.1 0.27.0
Odinstalujte verze pomocí helm uninstall příkazu . Následující příklad odinstaluje nasazení příchozího přenosu dat NGINX a nástroje cert-manager.
$ helm uninstall cert-manager nginx --namespace ingress-basic
release "cert-manager" uninstalled
release "nginx" uninstalled
Dále odeberte dvě ukázkové aplikace:
kubectl delete -f aks-helloworld-one.yaml --namespace ingress-basic
kubectl delete -f aks-helloworld-two.yaml --namespace ingress-basic
Odeberte trasu příchozího přenosu dat, která směrovala provoz do ukázkových aplikací:
kubectl delete -f hello-world-ingress.yaml --namespace ingress-basic
Nakonec můžete odstranit samotný obor názvů. Použijte příkaz kubectl delete a zadejte název oboru názvů:
kubectl delete namespace ingress-basic
Další kroky
Tento článek obsahuje některé externí komponenty pro AKS. Další informace o těchto komponentách najdete na následujících stránkách projektu:
Můžete také:
- Vytvoření základního kontroleru příchozího přenosu dat s externím připojením k síti
- Povolení doplňku pro směrování aplikace HTTP
- Vytvoření kontroleru příchozího přenosu dat, který používá interní privátní síť a IP adresu
- Vytvoření kontroleru příchozího přenosu dat, který používá vlastní certifikáty TLS
- Vytvoření kontroleru příchozího přenosu dat, který používá Let's Encrypt k automatickému generování certifikátů TLS se statickou veřejnou IP adresou