当前位置: 首页 > news >正文

南京建设网站企业wordpress的伪静态

南京建设网站企业,wordpress的伪静态,网站开发语言分辨,重庆官网seo分析前言: 将应用程序及其服务部署到 Kubernetes 集群后,一个问题浮现:如何使用自定义域名访问它?一个简单的解决方案是创建一条 A 记录,将域名指向服务 IP 地址。这可以手动完成,但随着服务数量的增加&#x…

前言:

将应用程序及其服务部署到 Kubernetes 集群后,一个问题浮现:如何使用自定义域名访问它?一个简单的解决方案是创建一条 A 记录,将域名指向服务 IP 地址。这可以手动完成,但随着服务数量的增加,扩展起来会非常困难。而使用外部 DNS 可以完全自动化。

什么是Kubernetes 外部 DNS?

外部 DNS 是一个 Kubernetes 控制器,它会监视带有特定注释的新 Ingress 和服务,然后在 Azure DNS 中创建相应的 DNS 记录。它在 Github 上是一个开源项目:https://github.com/kubernetes-sigs/external-dns。它支持 30 多个 DNS 提供商,包括 Azure DNS 和私有 DNS 区域。

外部 DNS Pod 使用以下三种方法之一向 Azure DNS 进行身份验证:

  • 服务主体。
  • Kubelet 托管身份。
  • 由 AAD Pod 身份控制的用户分配的托管身份。

在本教程中,您将使用服务主体 (Service Principal)。

创建带有 Ingress Controller 的 AKS 集群

创建 AKS 集群。

$AKS_RG="rg-aks-cluster"
$AKS_NAME="aks-cluster"az group create -n $AKS_RG -l eastasiaaz aks create -g $AKS_RG -n $AKS_NAME `
--kubernetes-version "1.31.1" `
--node-count 3 `
--network-plugin azureaz aks get-credentials -n $AKS_NAME -g $AKS_RG --overwrite-existing

安装 nginx Ingress Controller 以便稍后使用。

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginxhelm repo updatehelm upgrade --install ingress-nginx ingress-nginx/ingress-nginx `
--create-namespace `
--namespace ingress-nginx `
--set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz

创建 Azure DNS 区域,或使用现有区域

您可以创建一个新的 Azure DNS 区域,可以使用或不使用委托域名。不使用委托域名意味着它将无法公开解析域名。但您仍然可以看到已创建的 DNS 记录。

在本实验中,我使用委托域名:rockwang.cloud。请将其替换为您自己的域名。

$DNS_ZONE_NAME="rockwang.cloud"
$DNS_ZONE_RG="rg-azure-dns"az group create -n $DNS_ZONE_RG -l eastasiaaz network dns zone create -g $DNS_ZONE_RG -n $DNS_ZONE_NAME

为 ExternalDNS 创建服务主体

ExternalDNS 将连接到 Azure DNS 以更改其配置。因此,它需要进行身份验证。如前所述,您将使用服务主体。

$EXTERNALDNS_SPN_NAME="spn-external-dns-aks"$DNS_SPN=$(az ad sp create-for-rbac --name $EXTERNALDNS_SPN_NAME)
$EXTERNALDNS_SPN_APP_ID=$(echo $DNS_SPN | jq -r '.appId')
$EXTERNALDNS_SPN_PASSWORD=$(echo $DNS_SPN | jq -r '.password')

为服务主体分配 RBAC

授予服务主体对 Azure DNS 区域的访问权限。


# fetch DNS id and RG used to grant access to the service principal
$DNS_ZONE_ID=$(az network dns zone show -n $DNS_ZONE_NAME -g $DNS_ZONE_RG --query "id" -o tsv)
$DNS_ZONE_RG_ID=$(az group show -g $DNS_ZONE_RG --query "id" -o tsv)# assign reader to the resource group
az role assignment create --role "Reader" --assignee $EXTERNALDNS_SPN_APP_ID --scope $DNS_ZONE_RG_ID# assign contributor to DNS Zone itself
az role assignment create --role "DNS Zone Contributor" --assignee $EXTERNALDNS_SPN_APP_ID --scope $DNS_ZONE_ID

 验证role 的指派

az role assignment list --all --assignee $EXTERNALDNS_SPN_APP_ID -o table
# Principal                                         Role                        Scope
# ------------------------------------  --------------------  ----------------------------------------------------------------------------------------------------------------------------------
# 9cc6c0d1-99a3-4d86-9df4-a84df55b8232  Reader                /subscriptions/82f6d75e-85f4-434a-ab74-5dddd9fa8910/resourceGroups/rg-azure-dns
# 9cc6c0d1-99a3-4d86-9df4-a84df55b8232  DNS Zone Contributor  /subscriptions/82f6d75e-85f4-434a-ab74-5dddd9fa8910/resourceGroups/rg-azure-dns/providers/Microsoft.Network/dnszones/rockwang.cloud

为服务主体创建 Kubernetes 密钥

ExternalDNS 需要在名为 azure.json 的 JSON 文件中找到服务主体凭据,该文件保存为 Kubernetes 密钥。

cat azure.json
# {
#   "tenantId": "16b3c013-d300-468d-ac64-7eda0820b6d3",
#   "subscriptionId": "82f6d75e-85f4-434a-ab74-5dddd9fa8910",
#   "resourceGroup": "rg-dns-zone-rockwang-cloud",
#   "aadClientId": "9cc6c0d1-99a3-4d86-9df4-a84df55b8232",
#   "aadClientSecret": "LJS8Q~ZeuAPJfE7Hjzy6bYZ8NQ4O5YrlJfATxbL6"
# }

将为密钥文件创建secret

kubectl create namespace external-dns
# namespace/external-dns createdkubectl create secret generic azure-config-file -n external-dns --from-file azure.json
# secret/azure-config-file created

验证secret 

kubectl describe secret azure-config-file -n external-dns
# Name:         azure-config-file
# Namespace:    external-dns
# Labels:       <none>
# Annotations:  <none>
# 
# Type:  Opaque
# 
# Data
# ====
# azure.json:  552 bytes

部署外部 DNS

ExternalDNS 可以通过原始 YAML 清单、Helm Chart 或 Operator 部署。为方便起见,我们将使用官方 YAML 部署,该部署文件位于:https://github.com/kubernetes-sigs/external-dns/blob/master/docs/tutorials/azure.md#manifest-for-clusters-with-rbac-enabled-cluster-access。

在部署 YAML 之前,请更改 external-dns.yaml 文件中 ClusterRoleBinding 中的命名空间名称。

apiVersion: v1
kind: ServiceAccount
metadata:name: external-dns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: external-dns
rules:- apiGroups: [""]resources: ["services","endpoints","pods", "nodes"]verbs: ["get","watch","list"]- apiGroups: ["extensions","networking.k8s.io"]resources: ["ingresses"]verbs: ["get","watch","list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: external-dns-viewer
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: external-dns
subjects:- kind: ServiceAccountname: external-dnsnamespace: external-dns # default
---
apiVersion: apps/v1
kind: Deployment
metadata:name: external-dns
spec:strategy:type: Recreateselector:matchLabels:app: external-dnstemplate:metadata:labels:app: external-dnsspec:serviceAccountName: external-dnscontainers:- name: external-dnsimage: registry.k8s.io/external-dns/external-dns:v0.13.2args:- --source=service- --source=ingress- --provider=azure- --txt-prefix=externaldns-volumeMounts:- name: azure-config-filemountPath: /etc/kubernetesreadOnly: truevolumes:- name: azure-config-filesecret:secretName: azure-config-file
kubectl apply -f external-dns.yaml -n external-dns
# serviceaccount/external-dns created
# clusterrole.rbac.authorization.k8s.io/external-dns created
# clusterrolebinding.rbac.authorization.k8s.io/external-dns-vieYour created
# deployment.apps/external-dns created

 

将外部 DNS 与 Kubernetes 服务结合使用

您将创建一个类型为 LoadBalancer 的公共服务。这将创建一个新的公共 IP 地址来访问该服务。然后添加一个注释 external-dns.alpha.kubernetes.io/hostname,其值为自定义域名。外部 DNS 将引用此注释,以将 IP 地址添加到 DNS 区域(在本例中为 app01.rockwang.cloud)。

# app-lb.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: app01
spec:selector:matchLabels:app: app01template:metadata:labels:app: app01spec:containers:- image: mcr.microsoft.com/dotnet/samples:aspnetappname: aspnetappports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: app01-svcannotations:external-dns.alpha.kubernetes.io/hostname: app01.rockwang.cloud # external-dns configuration
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: app01type: LoadBalancer
kubectl apply -f app-lb.yaml 
# deployment.apps/nginx created
# service/nginx-svc createdkubectl get pods,svc
# NAME                                              READY   STATUS    RESTARTS   AGE
# pod/app01-67745dc95d-bwzgf      1/1        Running   0                 100s# NAME                       TYPE                 CLUSTER-IP    EXTERNAL-IP    PORT(S)            AGE
# service/app01-svc    LoadBalancer   10.0.95.113     20.86.202.21     80:31067/TCP   100s
# service/kubernetes   ClusterIP          10.0.0.1           <none>            443/TCP            2m30s

 

创建通过 Ingress 公开的示例应用

您将通过 Ingress 控制器公开应用。在 Ingress 资源中,您将添加一个配置,供外部 DNS 用来管理 Azure DNS 中的域名。该配置是 Ingress 资源(即主机)的原生配置。

# app-ingress.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: app02
spec:selector:matchLabels:app: app02template:metadata:labels:app: app02spec:containers:- image: mcr.microsoft.com/dotnet/samples:aspnetappname: aspnetappports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: app02-svc
spec:ports:- port: 80protocol: TCPtargetPort: 80selector:app: app02type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: app02-ingress
spec:ingressClassName: nginxrules:- host: app02.rockwang.cloudhttp:paths:- path: /pathType: Prefixbackend:service:name: app02-svcport:number: 80

 

kubectl apply -f app-ingress.yaml
# deployment.apps/app02 created
# service/app02-svc created
# ingress.networking.k8s.io/app02-ingress createdkubectl get pods,svc,ingress
# NAME                                             READY   STATUS     RESTARTS   AGE
# pod/app02-9bdd6845f-vh422       1/1          Running   0                 92s# NAME                       TYPE            CLUSTER-IP    EXTERNAL-IP    PORT(S)        AGE
# service/app02-svc    ClusterIP      10.0.74.196     <none>            80/TCP          92s
# service/kubernetes   ClusterIP      10.0.0.1           <none>            443/TCP        2m30s# NAME                                                         CLASS   HOSTS                          ADDRESS        PORTS   AGE
# ingress.networking.k8s.io/app02-ingress   nginx    app02.rockwang.cloud   20.73.123.67   80         92s

让我们检查一下 Azure DNS 区域配置。注意,已添加 A 记录,其中包含服务和入口控制器的公共 IP 地址。

 通过遵循这些步骤,您可以使用 Azure DNS 和外部 DNS 有效地管理在 AKS 中运行的应用程序的 DNS 记录,从而自动化该过程并确保通过用户友好的域名无缝访问您的服务。

http://www.dtcms.com/a/605359.html

相关文章:

  • redis的下载和安装详解
  • 搜索智能体
  • 第27集科立分板机:东莞科立自动化流水线带领生产新变革
  • 物流网站开发实训离型剂技术支持东莞网站建设
  • Ubuntu 24.04 一站式 Flask 生产部署:pyenv + PyCharm + Gunicorn + Nginx + systemd
  • 青海省公路建设服务网站模块化网站开发
  • 开源CICD工具-Drone
  • 给予虚拟成像台尝鲜版十之二,完善支持 HTML 原型模式
  • 原生表格文本过长展示问题,参考layui长文本,点击出现文本域
  • 桂林网站建设培训asp.net网站建设
  • Ubuntu 24.04 MariaDB 完整安装与配置文档
  • [特殊字符] 在 Linux 上设置 SQLite
  • Arbess从初级到进阶(2) - 使用Arbess+GitLab实现Vue.js项目自动化部署
  • 网站开发外文参考文献邯郸小学网站建设
  • C语言编译器最新版 | 提升开发效率,优化性能
  • 手游网站怎么做企业型网站
  • 用Rust实现二进制文件差异工具
  • 代理IP的匿名性测试:如何验证你的真实IP是否已泄露?
  • FreeRTOS 在 AS32系列RISC-V 架构MCU电机驱动中的应用实践与优化
  • 【OpenCV + VS】 图像像素类型转换与归一化
  • 用 Rust 写一个可落地的目录实时监听器:跨平台文件系统事件的可靠表达与工程实践
  • Linux网络--Socket 编程 TCP
  • 【一文了解】C#反射
  • 网站建设seo推广外贸网站建设海外推广
  • 网站ip域名查询安徽省住房城乡建设厅网站电工
  • 202511-Selenium技术深度解析:Web自动化测试的王者之路
  • Android 打开 在线 pdf 文件
  • Python 教程:如何快速在 PDF 中添加水印(文字、图片)
  • 普中51单片机学习笔记-矩阵按键
  • 视觉语言模型新突破!开源项目解读