Openshift 自建DDNS动态域名

某种情况下如openstack或者openshift/kubernetes软件部署过程由于需要标准的 域名系统(DNS UPDATE)RFC 2136中的动态更新功能, 但是现有的阿里云/华为云均不提供该规范,大多理由为安全问题.

此时需要自建DDNS解决此问题.

前提条件

需要配置自有DNS服务器,参考配置DNS服务器脚本. 操作系统基于centos 7.5

在阿里云万网的DNS服务器新建2条记录:

ns.ddns.xxxxx.com -- A记录 --IPV4指向需要安装的DNS服务器IP

ddns.xxxxx.com – NS记录 – http://ns.ddns.xxxxx.com

此时ddns子域名下的所有解析全部转移到这台DNS服务器进行解析服务.

配置已有的named服务

创建一个安全key

首先,我们需要生成一个Key,用于更新记录的授权。这里使用了HMAC-MD5算法来生成Key。运行:

dnssec-keygen -a HMAC-MD5 -b  128  -n HOST ddnsxxxxx

 

执行完成后会在当前目录生成2个文件,

文件名大概如下: 

Kddnsxxxxx.+157+43433.key Kddnsxxxxx.+157+43433.private
打开其中的private,复制key出来.
more Kddnsxxxxx.+ 157 + 43433 . private
Private-key-format: v1. 3
Algorithm:  157  (HMAC_MD5)
Key: MjR1T1Bdwi9NaxiT+5yIYA==
Bits: AAA=
Created:  20181207022257
Publish:  20181207022257
Activate:  20181207022257

修改已有named配置

在/etc/named.conf中,zone “ddns.xxxxxx.com”之前加上:secret内容就是刚才复制出来的key值.

key  "ddnskey"  {
     algorithm hmac-md5;
     secret  "MjR1T1Bdwi9NaxiT+5yIYA==" ;
};

然后继续修改文件末尾zone的定义:

zone  "ddns.xxxxx.com"  IN {
         type master;
         file  "ddns.xxxxx.com.zone" ;
         allow-update { key ddnskey; };
};

同时,selinux也有可能限制named写入文件,需要关闭:

setsebool named_write_master_zones  true

 

设置完成后。重启named:
systemctl restart named

尝试dnsupdate功能

使用nsupdate命令对DNS进行更新:

# nsupdate
> server  127.0 . 0.1  53
> zone ddns.xxxxx.com
> key ddnskey MjR1T1Bdwi9NaxiT+5yIYA==
> update add abcdefg.ddns.xxxxx.com  200  2.2 . 2.2
> send

测试update结果

# dig abcdefg.ddns.xxxxx.com  @localhost
 
; <<>> DiG  9.9 . 4 -RedHat- 9.9 . 4 - 72 .el7 <<>> vpn.ddns.xxxxx.com  @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id:  28156
;; flags: qr aa rd ra; QUERY:  1 , ANSWER:  1 , AUTHORITY:  1 , ADDITIONAL:  2
 
;; OPT PSEUDOSECTION:
; EDNS: version:  0 , flags:; udp:  4096
;; QUESTION SECTION:
;abcdefg.ddns.xxxxx.com.        IN  A
 
;; ANSWER SECTION:
abcdefg.ddns.xxxxx.com.  200  IN  A    13.37 . 27.291
 
;; AUTHORITY SECTION:
ddns.xxxxx.com.  120  IN  NS  ns.ddns.xxxxx.com.
 
;; ADDITIONAL SECTION:
ns.ddns.xxxxx.com.   120  IN  A    39.106 . 92.7
 
;; Query time:  0  msec
;; SERVER:  127.0 . 0.1 # 53 ( 127.0 . 0.1 )
;; WHEN: Fri Dec  07  10 : 41 : 49  CST  2018
;; MSG SIZE  rcvd:  97

最后收尾

别忘记开通防火墙,包括主机的 53 udp/tcp,还有云主机的upd/tcp 53都开通.

同时做一次异地机器测试,检查DNS是否在其他dns服务器有复制.通过nslookup 检查TTL值,检查ns名称是否正确.

补充在routerOS的脚本参考

 

/tool dns-update dns-server= 39.108 . 90.77  key-name= "ddnskey"  key= "MjR1T1Bdwi9NaxiT+5yIYA=="  name=abcdefg address= "3.4.5.6"  zone= "ddns.xxxxx.com"  ttl= 200

更详细routerOS脚本在这里ddnsscript.txt,

#    :log info "DDNS: Begin":local ddnsuser "ddns-key":local ddnspass "q1B3kUxxWioLEVh74h8g==":local ddnshost "vpn":local ddnszone "ddns.iqyuan.com":local ddnsinterface "pppoe-2F":local ddnns "vpn.ddns.iqyuan.com":global ddnslastip#    :global ddnslastip [:resolve $ddnns]:global ddnsip [  /ip address get [/ip address find interface=$ddnsinterface] address ]#    log info $ddnslastip#    log info (  [:pick $ddnsip 0   [:find $ddnsip "/"]]):if ([:typeof [:global ddnslastip]] = nil ) do={ :global ddnslastip 0.0.0.0/0 } else={ :set ddnslastip $ddnslastip }:if ([:typeof [:global ddnsip]] =    nil ) do={:log info ("   DDNS: No ip address present on  $ddnsinterface  , please check ")}   else={:if ($ddnsip != $ddnslastip) do={#    :log info "DDNS: DDNS!"/tool dns-update dns-server=39.108.90.77 key-name=$ddnsuser  key=$ddnspass  name=$ddnshost address=[:pick $ddnsip 0 [:find $ddnsip "/"] ] ttl=200   zone=$ddnszone:log info (  "shuaxin DDNS" .  $ddnsip):global ddnslastip $ddnsip}   else={#    :log info "DDNS: IP"}}#:log info "DDNS: End"
View Code

 

 

posted on 2019-06-17 10:53 CanntBelieve 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/FlyAway2013/p/11038540.html

<think>嗯,用户问的是OpenShift的动态存储,我需要详细解释一下这个概念。首先,我应该回忆一下OpenShift的基础知识,尤其是存储部分。动态存储和静态存储的区别是关键点,用户可能已经了解静态存储,所以需要明确动态存储的优势。 动态存储的核心是动态卷供应,也就是Dynamic Provisioning。用户不需要手动创建PV,而是通过StorageClass来定义不同存储类型。需要解释StorageClass的作用,以及它是如何与PVC配合的。 然后,我需要提到支持的存储后端,比如AWS EBS、Ceph、NFS等,这样用户知道有哪些选项可用。可能用户的环境中有特定的存储系统,比如他们可能在使用云服务或者自有存储,所以举例会有帮助。 接下来,使用流程部分很重要。用户需要知道如何实际使用动态存储,包括创建StorageClass、PVC,然后Pod如何挂载。这部分需要步骤清晰,但可能不需要太详细的命令,除非用户进一步询问。 优势方面,自动化、灵活性和资源优化是重点。对比静态存储,动态存储减少了管理负担,适合大规模环境。同时,用户可能关心成本问题,动态存储按需分配可能节省资源,这点也应该提到。 最后,应用场景需要举例,比如有状态应用、CI/CD流水线、多租户环境,这样用户能联想到自己的使用情况。可能用户是在部署数据库或者需要为不同团队分配存储,这些场景能帮助他们理解动态存储的实际价值。 还要注意使用中文,避免技术术语过于晦涩,但必要的术语如PVC、StorageClass还是需要保留,并适当解释。整体结构要逻辑清晰,从概念到使用再到优势,逐步展开。确保用户即使对OpenShift不熟悉也能理解动态存储的基本概念和用途。</think>Shift 的动态存储(Dynamic Storage Provisioning)是 Kubernetes 和 OpenShift 中用于自动化管理持久化存储资源的核心功能。它允许用户按需自动创建存储卷(Persistent Volume, PV),而无需管理员手动预配置存储资源,从而简化了有状态应用(如数据库、消息队列等)的存储管理。 -- ### **核心概念** 1. **动态卷供应(Dynamic Provisioning)** - 当用户创建 **PersistentVolumeClaim(PVC)** 时,OpenShift 会根据 PVC 中指定的存储需求(如容量、访问模式、存储类等),自动从底层存储系统分配一个合适的 PV。 - 这一过程完全自动化,无需管理员预先创建 PV。 2. **StorageClass(存储类)** - 动态存储依赖 `StorageClass` 对象定义存储后端的类型和参数(如云存储、块存储、文件存储等)。 - 不同存储类可对应不同的存储系统(如 AWS EBS、Ceph RBD、NFS、OpenShift Container Storage 等)。 - 示例:定义一个基于 AWS EBS 的 StorageClass: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ebs-sc provisioner: ebs.csi.aws.com parameters: type: gp3 ``` --- ### **动态存储的使用流程** 1. **管理员配置存储后端** - 部署支持的存储系统(如 Ceph、NFS 服务器、云存储等)。 - 创建对应的 `StorageClass`,定义如何动态分配存储。 2. **用户申请存储(PVC)** - 用户通过 PVC 声明需要的存储资源,并指定 StorageClass: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: ebs-sc # 指定动态存储类 accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 3. **自动创建 PV 并绑定** - OpenShift 检测到 PVC 后,自动调用 StorageClass 中定义的 `provisioner`(存储驱动),在底层存储系统中分配资源并创建 PV。 - PV 自动与 PVC 绑定,供 Pod 挂载使用。 4. **Pod 使用存储** - 在 Pod 中通过 `volumes` 字段引用 PVC: ```yaml spec: containers: - name: app volumeMounts: - name: data mountPath: /data volumes: - name: data persistentVolumeClaim: claimName: my-pvc ``` -- ### **动态存储的优势** 1. **自动化管理** - 避免手动创建 PV,减少运维负担。 - 按需分配存储资源,提升效率。 2. **灵活性** - 支持多种存储后端(公有云、私有云、本地存储等)。 - 通过不同 StorageClass 实现存储策略差异化(如高性能 SSD、低成本 HDD)。 3. **资源优化** - PV 生命周期与 PVC 绑定,删除 PVC 时可自动回收存储资源(需配置 `reclaimPolicy`)。 --- ### **典型应用场景** - **有状态应用**:数据库(MySQL、PostgreSQL)、消息中间件(Kafka、RabbitMQ)等需要持久化数据的服务。 - **CI/CD 流水线**:为构建和测试任务动态分配临时存储。 - **多租户环境**:不同团队按需申请隔离的存储资源。 --- ### **注意事项** - **存储后端兼容性**:需确保存储系统支持 Kubernetes/OpenShift 的动态供应接口(如 CSI 驱动)。 - **回收策略**:动态创建的 PV 默认回收策略为 `Delete`(删除 PVC 时会同步删除底层存储),可根据需求调整为 `Retain`。 - **配额管理**:结合 OpenShift 的资源配额(Resource Quota),限制命名空间的存储使用量。 通过动态存储,OpenShift 能够高效、弹性地满足云原生应用对持久化存储的需求,是构建现代化有状态服务的关键能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值