K8S Core-DNS

2023-05-16

1. Kube-dns

1.1 概述

img

KubeDNS 由三部分构成:

  • kube-dns:核心组件

    • KubeDNS:依赖 client-go 中的 informer 机制,监听 Service 和 Endpoint 的变化情况,并将相关信息更新到 SkyDNS 中
    • SkyDNS:负责 DNS 解析,监听在 10053 端口,同时也监听在 10055 端口提供 metrics 服务
  • dnsmasq:区分 Domain 是集群内部还是外部,给外部域名提供上游解析,内部域名发往10053端口,并将解析结构缓存,提高解析效率

    • dnsmasq-nanny:容器里的1号进程,不负责处理 DNS LookUp 请求,只负责管理 dnsmasq
    • dnsmasq:负责处理 DNS LookUp 请求,并缓存结果
  • sidecar: 对 kube-dns和dnsmasq进行监控检查和收集监控指标

1.2 创建 RBAC

# kube-dns-rbac.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: system:kube-dns
rules:
  - apiGroups:
    - ""
    resources:
    - endpoints
    - services
    verbs:
    - get
    - list
    - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: system:kube-dns
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:kube-dns
subjects:
- kind: ServiceAccount
  name: kube-dns
  namespace: kube-system

1.3 部署 kube-dns

# kube-dns-deploy.yml
apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "KubeDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 10.0.0.2
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  # replicas: not specified here:
  # 1. In order to make Addon Manager do not reconcile this replicas parameter.
  # 2. Default is 1.
  # 3. Will be tuned in real time if DNS horizontal auto-scaling is turned on.
  strategy:
    rollingUpdate:
      maxSurge: 10%
      maxUnavailable: 0
  selector:
    matchLabels:
      k8s-app: kube-dns
  template:
    metadata:
      labels:
        k8s-app: kube-dns
      annotations:
        prometheus.io/port: "10054"
        prometheus.io/scrape: "true"
    spec:
      priorityClassName: system-cluster-critical
      securityContext:
        seccompProfile:
          type: RuntimeDefault
        supplementalGroups: [ 65534 ]
        fsGroup: 65534
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                  - key: k8s-app
                    operator: In
                    values: ["kube-dns"]
              topologyKey: kubernetes.io/hostname
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"
      volumes:
      - name: kube-dns-config
        configMap:
          name: kube-dns
          optional: true
      nodeSelector:
        kubernetes.io/os: linux
      containers:
      - name: kubedns
        image: k8s.gcr.io/dns/k8s-dns-kube-dns:1.17.3
        resources:
          # TODO: Set memory limits when we've profiled the container for large
          # clusters, then set request = limit to keep this container in
          # guaranteed class. Currently, this container falls into the
          # "burstable" category so the kubelet doesn't backoff from restarting it.
          limits:
            memory: 170Mi
          requests:
            cpu: 100m
            memory: 70Mi
        livenessProbe:
          httpGet:
            path: /healthcheck/kubedns
            port: 10054
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        readinessProbe:
          httpGet:
            path: /readiness
            port: 8081
            scheme: HTTP
          # we poll on pod startup for the Kubernetes master service and
          # only setup the /readiness HTTP server once that's available.
          initialDelaySeconds: 3
          timeoutSeconds: 5
        args:
        - --domain=cluster.local.
        - --dns-port=10053
        - --config-dir=/kube-dns-config
        - --v=2
        env:
        - name: PROMETHEUS_PORT
          value: 10055
        ports:
        - containerPort: 10053
          name: dns-local
          protocol: UDP
        - containerPort: 10053
          name: dns-tcp-local
          protocol: TCP
        - containerPort: 10055
          name: metrics
          protocol: TCP
        volumeMounts:
        - name: kube-dns-config
          mountPath: /kube-dns-config
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          runAsUser: 1001
          runAsGroup: 1001
      - name: dnsmasq
        image: k8s.gcr.io/dns/k8s-dns-dnsmasq-nanny:1.17.3
        livenessProbe:
          httpGet:
            path: /healthcheck/dnsmasq
            port: 10054
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        args:
        - -v=2
        - -logtostderr
        - -configDir=/etc/k8s/dns/dnsmasq-nanny
        - -restartDnsmasq=true
        - --
        - -k
        - --cache-size=1000
        - --no-negcache
        - --dns-loop-detect
        - --log-facility=-
        - --server=/cluster.local/127.0.0.1#10053
        - --server=/in-addr.arpa/127.0.0.1#10053
        - --server=/ip6.arpa/127.0.0.1#10053
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
        # see: https://github.com/kubernetes/kubernetes/issues/29055 for details
        resources:
          requests:
            cpu: 150m
            memory: 20Mi
        volumeMounts:
        - name: kube-dns-config
          mountPath: /etc/k8s/dns/dnsmasq-nanny
        securityContext:
          capabilities:
            drop:
              - all
            add:
              - NET_BIND_SERVICE
              - SETGID
      - name: sidecar
        image: k8s.gcr.io/dns/k8s-dns-sidecar:1.17.3
        livenessProbe:
          httpGet:
            path: /metrics
            port: 10054
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        args:
        - --v=2
        - --logtostderr
        - --probe=kubedns,127.0.0.1:10053,kubernetes.default.svc.cluster.local,5,SRV
        - --probe=dnsmasq,127.0.0.1:53,kubernetes.default.svc.cluster.local,5,SRV
        ports:
        - containerPort: 10054
          name: metrics
          protocol: TCP
        resources:
          requests:
            memory: 20Mi
            cpu: 10m
        securityContext:
          allowPrivilegeEscalation: false
          readOnlyRootFilesystem: true
          runAsUser: 1001
          runAsGroup: 1001
      dnsPolicy: Default  # Don't use cluster DNS.
      serviceAccountName: kube-dns

1.4 验证结果

$ kubectl apply -f kube-dns-rbac.yml
$ kubectl apply -f kube-dns-deploy.yml

$ kubectl get pod -n kube-system -o wide | grep kube-dns
kube-dns-594c5b5cb5-6wttp   3/3     Running   0          13m     10.244.2.29     k8s-node1     <none>           <none>

$ kubectl describe pod kube-dns-594c5b5cb5-mdxp6 -n kube-system
...
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  48s   default-scheduler  Successfully assigned kube-system/kube-dns-594c5b5cb5-6wttp to k8s-node1
  Normal  Pulled     47s   kubelet            Container image "k8s.gcr.io/dns/k8s-dns-kube-dns:1.17.3" already present on machine
  Normal  Created    47s   kubelet            Created container kubedns
  Normal  Started    47s   kubelet            Started container kubedns
  Normal  Pulled     47s   kubelet            Container image "k8s.gcr.io/dns/k8s-dns-dnsmasq-nanny:1.17.3" already present on machine
  Normal  Created    47s   kubelet            Created container dnsmasq
  Normal  Started    47s   kubelet            Started container dnsmasq
  Normal  Pulled     47s   kubelet            Container image "k8s.gcr.io/dns/k8s-dns-sidecar:1.17.3" already present on machine
  Normal  Created    47s   kubelet            Created container sidecar
  Normal  Started    47s   kubelet            Started container sidecar

1.5 私有和上游 DNS 服务器

apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
data:
  stubDomains: |
    {“acme.local”: [“1.2.3.4”]}
  upstreamNameservers: |
    [“8.8.8.8”, “8.8.4.4”]

查询请求首先会被发送到 kube-dns 的 DNS 缓存层 (Dnsmasq 服务器)。Dnsmasq 服务器会先检查请求的后缀,带有集群后缀(例如:”.cluster.local”)的请求会被发往 kube-dns,拥有存根域后缀的名称(例如:”.acme.local”)将会被发送到配置的私有 DNS 服务器 [“1.2.3.4”]。最后,不满足任何这些后缀的请求将会被发送到上游 DNS [“8.8.8.8”, “8.8.4.4”] 里。

img

1.6 优缺点

优点:依赖 dnsmasq ,性能有保障

缺点

  • dnsmasq-nanny 通过kill 来重启 dnsmasq,简单粗暴,可能导致这段时间内大量的 DNS 请求失败

  • dnsmasq-nanny 检测文件的方式,可能会导致以下问题:

    • 每次遍历目录下的所有文件,然后用 ioutil.ReadFile 读取文件内容。如果目录下文件数量过多,可能出现在遍历的同时文件也在被修改,遍历的速度跟不上修改的速度。 这样可能导致遍历完了,某个配置文件才更新完。那么此时,你读取的一部分文件数据并不是和当前目录下文件数据完全一致,本次会重启 dnsmasq。进而,下次检测,还认为有文件变化,到时候,又重启一次 dnsmasq。

    • 文件的检测,直接使用 ioutil.ReadFile 读取文件内容,也存在问题。如果文件变化,和文件读取同时发生,很可能你读取完,文件的更新都没完成,那么你读取的并非一个完整的文件,而是坏的文件,这种文件,dnsmasq-nanny 无法做解析,不过官方代码中有数据校验,解析失败也问题不大,大不了下个周期的时候,再取到完整数据,再解析一次。

2. CoreDNS

2.1 概述

img

CoreDNS 使用Caddy作为底层的 Web Server,它是一个轻量易用的Web服务器,支持 HTTP、HTTPS、HTTP/2、GRPC 等多种连接方式

与 KubeDNS 相比,CoreDNS 的效率更高,资源占用更小

2.2 部署 CoreDNS

wget https://github.com/coredns/deployment/archive/refs/tags/coredns-1.14.0.tar.gz
tar zxvf coredns-1.14.0.tar.gz
cd deployment-coredns-1.14.0/kubernetes

# 部署
./deploy.sh | kubectl apply -f -
kubectl delete --namespace=kube-system deployment kube-dns

# 卸载
./rollback.sh | kubectl apply -f -
kubectl delete --namespace=kube-system deployment coredns

2.3 DNS 格式

  • Service

    • A record:${my-svc}.${my-namespace}.svc.cluster.local
      • 普通 Service 解析为 Cluster IP
      • Headless Service 解析为指定的 Pod IP 列表
    • SRV record: _${my-port-name}._${my-port-protocol}.${my-svc}.${my-namespace}.svc.cluster.local
  • Pod

    • A record: ${pod-ip-address}.${my-namespace}.pod.cluster.local
    • 指定 hostname 和 subdomain: ${hostname}.${subdomain}.${my-namespace}.svc.cluster.local
      • hostname: pod-name
      • subdomain: same as service.name

示例:

# nginx-dns-test.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deploy
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      hostname: web
      subdomain: nginx
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  clusterIP: None
  ports:
  - protocol: "TCP"
    port: 80
    targetPort: 80

验证:

$ kubectl get pod -l app=nginx -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
nginx-deploy-64bc9cddcf-p56qr   1/1     Running   0          15s   10.244.1.36   k8s-node01   <none>           <none>
nginx-deploy-64bc9cddcf-rq49v   1/1     Running   0          15s   10.244.2.34   k8s-node02   <none>           <none>
nginx-deploy-64bc9cddcf-xdwh6   1/1     Running   0          15s   10.244.1.35   k8s-node01   <none>           <none>

$ kubectl exec -it nginx-deploy-57776d9cd4-vkz7b -- /bin/sh
# cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local 8.8.8.8
options ndots:5
# hostname
web

$ kubectl run -it dns-test --rm --image=e2eteam/dnsutils:1.1 -- /bin/sh
/ # nslookup nginx
Server:         10.96.0.10
Address:        10.96.0.10#53

Name:   nginx.default.svc.cluster.local
Address: 10.244.1.35
Name:   nginx.default.svc.cluster.local
Address: 10.244.1.36
Name:   nginx.default.svc.cluster.local
Address: 10.244.2.34

/ # dig @10.96.0.10 -t A nginx.default.svc.cluster.local
...
;; ANSWER SECTION:
nginx.default.svc.cluster.local. 30 IN  A       10.244.1.35
nginx.default.svc.cluster.local. 30 IN  A       10.244.1.36
nginx.default.svc.cluster.local. 30 IN  A       10.244.2.34

/ # dig @10.96.0.10 10-244-1-35.default.pod.cluster.local
...
;; ANSWER SECTION:
10-244-1-35.default.pod.cluster.local. 30 IN A  10.244.1.35

# 指定hostname
/ # dig @10.96.0.10 -t A web.nginx.default.svc.cluster.local
...
;; ANSWER SECTION:
web.nginx.default.svc.cluster.local. 30 IN A    10.244.2.34
web.nginx.default.svc.cluster.local. 30 IN A    10.244.1.35
web.nginx.default.svc.cluster.local. 30 IN A    10.244.1.36

2.4 Corefile

img

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health {
            lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }  

CoreDNS 插件:

  • errors:错误记录输出到标准输出

  • health:健康报告 http://localhost:8080/health

  • ready:就绪检测,HTTP访问端口 :8181,返回 200 代表OK

  • kubernetes:将基于 Kubernetes 的服务和 Pod 的 IP 答复 DNS 查询

    • pods insecure:兼容kube-dns,该选项仅当在相同的命名空间中存在与IP匹配的pod时才返回A记录。如果不使用pod记录,可以使用pods disabled选项。
    • ttl:响应的TTL时间,默认5s,范围 0~3600
  • prometheus:度量指标值以 Prometheus 格式在 http://localhost:9153/metrics 上提供

  • forward: 不在 Kubernetes 集群域内的任何查询都将转发到 预定义的解析器 (/etc/resolv.conf)

  • cache:启用前端缓存

  • loop:检测到简单的转发环,如果发现死循环,则中止 CoreDNS 进程

  • reload:允许自动重新加载已更改的 Corefile。 编辑 ConfigMap 配置后,请等待两分钟,以使更改生效。

  • loadbalance:这是一个轮转式 DNS 负载均衡器, 它在应答中随机分配 A、AAAA 和 MX 记录的顺序。

2.5 CoreDNS 域名解析方案

2.5.1 配置存根域

如果集群操作员在 10.150.0.1 处运行了 Consul 域服务器, 且所有 Consul 名称都带有后缀 .consul.local

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
    consul.local:53 {
        errors
        cache 30
        forward . 10.150.0.1
    }   

2.5.2 Hosts,自定义域名

修改配置文件,将自定义域名添加到hosts中,可以添加任意解析记录,类似在本地/etc/hosts中添加解析记录。

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |-
    .:53 {
        errors
        health
        hosts {
            192.168.100.1 tplink.cc
            fallthrough
        }
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        ready
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

2.5.3 Rewrite,服务别名

将指定域名解析到某个 Service 的域名,即给Service取了个别名,指向域名到集群内服务

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |-
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
        }
        rewrite name api.elihe.io nginx.default.svc.cluster.local
        prometheus :9153
        ready
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }

2.5.4 Forward,级联DNS

修改配置文件,将forward后面的/etc/resolv.conf,改成外部DNS的地址,将自建 DNS 设为上游 DNS

apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
data:
  Corefile: |-
    .:53 {
        errors
        health
        kubernetes cluster.local in-addr.arpa ip6.arpa {
            pods insecure
            fallthrough in-addr.arpa ip6.arpa
        }
        rewrite name example.com nginx.default.svc.cluster.local
        prometheus :9153
        ready
        forward . 192.168.1.1
        cache 30
        loop
        reload
        loadbalance
    }

2.6 与 KubeDNS 比较

  • CoreDNS 每个实例只有一个容器,而 Kube-DNS 有三个
  • Kube-DNS 使用 dnsmasq 进行缓存,它是一个 C 线程。Core-DNS 使用 Go 开发,
  • CoreDNS 默认使用 negative caching,它的缓存的效率不如 dnsmasq,对集群内部域名解析的速度不如 kube-dns

3. 补充:DNS 解析依赖

DNS 解析会依赖 /etc/host.conf/etc/hosts/etc/resolv.conf 这个三个文件

nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8S Core-DNS 的相关文章

  • 满足我需求的强制门户

    我正在为我的组织寻找强制门户 我看到很多这样的应用程序将允许用户在 a 输入凭据或 b 付款后通过 我正在寻找的东西有点不同 让我介绍一些有关我的系统的基础知识 我正在使用活动目录和内部 DNS 运行基于 Windows 的网络 我有一个内
  • DNS 在 PHP 中不工作(但一般情况下可以)

    以下脚本 返回 DNS 记录列表 但最终在 file get contents 上失败 尽管 phpinfo 说 allow url fopen On On allow url include Off 出现以下错误 PHP 消息 PHP 警
  • 将多个域指向 Nginx 中的一台虚拟主机

    基本上 我想将每个域名重定向到一个虚拟主机 即文档 http nginx org en docs http server names html看起来很清楚 server listen 80 server name domain1 com w
  • 完全合格的域名是否需要句点?

    我对 FQDN 完全合格域名 感到困惑 FQDN 是否需要以句点结尾 喜欢sun or sun tuc noao edu or sun tuc noao edu 有什么不同 IT 的工作原理 域名 系统 https technet micr
  • 有没有一种方法可以透明地对 SQLAlchemy 对象执行验证?

    有没有办法在设置属性之后 或设置属性时 但在提交会话之前对对象执行验证 例如 我有一个领域模型Device有一个mac财产 我想确保mac属性在添加到数据库或在数据库中更新之前包含有效且经过清理的 mac 值 看起来 Pythonic 方法
  • 如何强制网站 DNS 刷新?

    我正在将我的 Web 应用程序移动到另一台服务器 并在接下来的几天内刷新 DNS 以指向新的 IP 位置 不幸的是 一些浏览器和 SO 保留了 DNS 缓存 这将使用户指向旧的 IP 位置 有些用户是新手 他们不会手动刷新 DNS 缓存 我
  • 将非 www 版本的域名重定向到 Jetty 中的 www

    我无法将我的非 www 域版本重定向到 wwwMovedContextHandler 它没有要重定向到的主机 Both www example com and example com指向我的网络服务器IP 当有人试图打开时example c
  • file_get_contents(): php_network_getaddresses: getaddrinfo 失败

    我正在尝试使用 cron 作业将一些值从一台服务器更新到另一台服务器 我使用 file get contents 奇怪的是 这偶尔会失败 一分钟还可以 一分钟就不行了 我收到这两个错误 PHP 警告 file get contents ph
  • 在 Android 上解析 DNS SRV 记录的轻量级方法

    在 Android 上进行 SRV 记录查找最节省资源的方法是什么 例如在 XMPP 客户端中 例如yaxim https github com pfleidi yaxim 我知道 JNDI http docs oracle com jav
  • 将 Google 域链接到 Amazon ec2 服务器

    我正在使用 Amazon EC2 实例来为 node js 应用程序提供服务 我最近通过以下方式购买了域名谷歌域名 https domains google com我想使用该域名来访问我的 node js 应用程序 Google Domai
  • 使用 IP 地址而不是域名发送电子邮件

    我试图避免通过 DNS 服务器将电子邮件发送到我托管的虚拟帐户之一上的地址 我知道我可以用方括号将 IP 地址括起来 但如何为服务器上的 虚拟 托管帐户指定邮箱用户名 换句话说 我在虚拟服务器上托管了多个域 所有域共享相同的 IP 地址 明
  • 从具有动态外部 IP 的计算机连接到 Azure SQL Server

    我正在尝试将具有动态外部 IP 的本地笔记本电脑连接到我们的 Azure SQL Server 为此 我创建了一个虚拟网络网关并将笔记本电脑连接到该网关 此外 我还向 SQL Server 添加了一个专用端点 之后 我可以使用telnet成
  • .htaccess 将子域重写到目录

    是否可以使用 htaccess将子域重写为目录 Example http sub domain example 显示内容 http domain example subdomains sub 尝试将其放入您的 htaccess file R
  • 每个用户的子域

    我拥有一个网站 为每个注册用户提供一个专用空间 如下所示 www mywebpage com user1 www mywebpage com user2 www mywebpage com user3在这条路径中 用户有他的迷你网站 我想为
  • 域名通过“dig”存在

    是否可以通过检查 dig 的输出来检查域名是否存在 在绑定源中我发现了这些常量 0 DNS R NOEROR 1 DNS R FORMERR 2 DNS R SERVFAIL 3 DNS R NXDOMAIN 4 DNS R NOTIMP
  • 如何在 Windows 中拦截 DNS 查询

    我正在研究如何在 Windows 中拦截 DNS 查询 以一种不需要将 DLL 注入到每个进程中的方式 并且理想情况下能够根据发出查询的进程做出决策 因此简单的 DNS 代理服务器是不够的 从表面上看 DNS 查询所采用的路径如下所示 某些
  • 可以分配给一个 Heroku 应用程序的最大域名数量?

    我正在与一位客户讨论一个项目 该客户希望他的用户可以通过自己的域名访问该应用程序 如果他们选择的话 可以分配给一个 Heroku 应用程序的自定义域数量是否有限制 The Heroku 文档 https devcenter heroku c
  • Mono 的 DNS 刷新超时

    虽然目前Mono项目的ServicePointManager类有DnsRefreshTimeout属性启用到其接口中 相关属性未实现 调用示例 ServicePointManager DnsRefreshTimeout 10 60 1000
  • 如何从主机将主机名解析为 Docker 容器?

    我知道 Docker 在 127 0 0 11 上运行一个神奇的 dns 所以我想我会尝试 nslookup mycontainername 127 0 0 11 where mycontainername当然 是我尝试访问的容器的名称 然
  • NGinx 域名重定向

    假设我有一个名为 xyz co 的网站 我还有其他具有相同前缀的域名 例如 xyz com xyz it xyz co it 现在 nginx 与端口 80 的 nginx conf 中的 server name xyz co 配合得很好

随机推荐

  • vscode 配置git

    下载git https git scm com 安装时 xff0c 直接默认所有选项安装 然后打开git安装目录 找到如下路径 打开vscode 点击文件 找到 首选项 点击设置 在搜索框搜索 git path 编辑settings jso
  • Intel D405 运行环境——Realsense-viewer

    第一章 Intel D405 运行环境 Realsense viewer 文章目录 第一章 Intel D405 运行环境 Realsense viewer一 开盲盒二 ubuntu环境下的realsense viewer安装 一 开盲盒
  • linux arm64 中断处理流程完整分析 (一)—— 中断向量表、中断处理流程汇编部分

    中断流程老生常谈 xff0c 但我一直以来也只是知道中断过来之后 xff0c 会保护现场 xff0c 跳到中断向量表 xff0c 执行中断 xff0c 恢复现场 xff0c 然后返回 至于更多细节 xff0c 就不得而知了 这篇文章旨在把更
  • ubuntu apt-get update 失败 server certificate verification failed

    报错提示解决方法step 1step 2step 3 报错提示 执行sudo apt get update时 xff0c 报错如下 Ign 188 https mirrors tuna tsinghua edu cn ubuntu xeni
  • mySQL创建数据库和数据表

    SQL 的主要功能是和数据库建立连接 xff0c 进行增删改查的操作 SQL是关系型数据库管理系统的标准语言 SQL 语言的作用 xff1a 数据定义语言 DDL Data Definition Language 用于创建数据库 xff0c
  • C++刷过的笔试题知识点

    函数若无返回值 xff0c 则它一定无形参 X 析构函数可以有参数 xff0c 但没有返回值 某32位系统下 C 43 43 程序void p 61 malloc 100 sizeof xff08 p xff09 61 4 xff1f 指针
  • 5-字符串

    1 字符串基础 1 1 定义字符串 通过String构造函数构造的字符串与字符串直接量的类型不同 前者为引用对象 xff0c 后者为值类型的字符串 span class token keyword var span s1 span clas
  • 没有Android SDK选项的解决办法+修改Android Studio中的Sdk路径

    安装教程 安装Android Studio时没有Android SDK选项 xff0c 可以先不管 xff0c 继续安装 注意在安装的过程中 xff0c 应该在最后一步install时 xff0c 会出现一个sdk的位置 比如我的在C Us
  • Android Studio一直在Download https://services.gradle.org/distributions/gradle-5.4.1-all.zip的解决方法

    Android Studio的新建工程下面一直出现Download https services gradle org distributions gradle 5 4 1 all zip 解决方法 xff1a 去https service
  • TDEngine 集群安装 (K8S)

    1 构建镜像 1 1 entrypoint sh span class token shebang important bin bash span span class token builtin class name set span 4
  • 设置Android Studio中的模拟器

    怎么设置Android Studio中的模拟器 xff0c 下面记录一下大概流程 然后自己选择设备 xff0c next 下好了之后next 建立后可能会出现以下图片所示问题 位于 的ADB二进制文件已过时 xff0c 并且在Android
  • 算法题算法题!!!!

    0223 思路 xff1a 先计算出老板没控制自己的情绪时的满意数量sum xff0c 再根据X的值 xff0c 维护一个滑动窗口 xff0c 遍历grumpy数组 xff0c 计算增加的满意数量add xff0c 选取最大的一个 xff0
  • MongoDB使用教程

    1 下载 xff1a https www mongodb com try download community 2 安装 解压下载包后正常步骤安装 创建服务 e Application develop MongoDB bin为路径 data
  • 动态规划几个例题!!

    动态规划法 xff01 xff01 xff01 dp i j 61 true表示字符串从下标 i 到下标 j 的位置是一个回文子串 xff08 所谓的状态转移 xff09 span class token keyword var span
  • 小白自学PIX飞控学习笔记

    小白自学飞控学习笔记 xff08 三 xff09 飞控开发准备工作准备阶段Misson Planner 高端操作 飞控开发准备工作 准备阶段 地面站电脑上安装mission planner 校准你的飞行器 Pixhawk指示灯的含义 红灯和
  • 线程同步的四种方式

    原文链接 xff1a https blog csdn net qq 40261882 article details 100538711 1 临界区 xff1a 通过对多线程的串行化来访问公共资源或一段代码 xff0c 速度快 xff0c
  • 分卷压缩与解压分卷

    分卷压缩与解压分卷 分卷压缩 名词解释 分卷压缩 分卷压缩操作 应用场景 解压分卷 解压踩坑 解压操作 nbsp nbsp nbsp nbsp 之前有写过一篇关于 Cesium 加载OSGB倾斜摄影三维模型 的文章 对OSGB模型的特点和文
  • C++输出到.txt文档,并被python读取

    C 43 43 中 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 in
  • 主流消息中间件及选型

    应用最为广泛的三大消息中间件 xff1a RabbitMQ RocketMQ kafka 在传统金融机构 银行 政府机构等有一些老系统还在使用IBM等厂商提供的商用MQ产品 选取原则 1 首先 xff0c 产品应该是开源的 开源意味着如果队
  • K8S Core-DNS

    1 Kube dns 1 1 概述 KubeDNS 由三部分构成 xff1a kube dns xff1a 核心组件 KubeDNS xff1a 依赖 client go 中的 informer 机制 xff0c 监听 Service 和