当前位置: 首页 > 知识库问答 >
问题:

如何获取statefulset无头服务的SRV DNS地址

昌砚
2023-03-14
kind: List
apiVersion: v1
items:
- apiVersion: v1
  kind: Service
  metadata:
    name: sfs-svc
    labels:
      app: sfs-app
  spec:
    ports:
    - port: 80
      name: web
    clusterIP: None
    selector:
      app: sfs-app
- apiVersion: apps/v1
  kind: StatefulSet
  metadata:
    name: web
  spec:
    selector:
      matchLabels:
        app: sfs-app # has to match .spec.template.metadata.labels
    serviceName: "sfs-svc"
    replicas: 3 
    template:
      metadata:
        labels:
          app: sfs-app # has to match .spec.selector.matchLabels
      spec:
        terminationGracePeriodSeconds: 10
        containers:
        - name: test-container
          image: nginx
          imagePullPolicy: IfNotPresent
          command: [ "sh", "-c"]
          args:
          - while true; do
              printenv MY_NODE_NAME MY_POD_NAME MY_POD_NAMESPACE >> /var/sl/output.txt;
              printenv MY_POD_IP >> /var/sl/output.txt;
              date >> var/sl/output.txt; 
              cat /var/sl/output.txt;
              sleep 999999;
            done;
          env:
            - name: MY_NODE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: spec.nodeName
            - name: MY_POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: MY_POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: MY_POD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          volumeMounts:
          - name: www
            mountPath: /var/sl
    volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: [ "ReadWriteOnce" ]
        #storageClassName: classNameIfAny
        resources:
          requests:
            storage: 1Mi

$kubectl版本

客户端版本:Version.info{Major:“1”,Minor:“13”,GitVersion:“V1.13.3”,GitCommit:“721BFA751924DA8D1680787490C54B9179B1FED0”,GitTreEstate:“Clean”,BuildDate:“2019-02-01T20:08:12Z”,GoVersion:“Go1.11.5”,编译器:“GC”,平台:“Linux/AMD64”}服务器版本:Version.info{Major:“1”,Minor:“14”,GitVersion:“V1.14.1”,GitCommit:“B7394102D6EF778017F2CA4046ABBAA23 B88C290”,GitTreeState:“Clean”,BuildDate:“2019-04-08T17:02:58Z”,GoVersion:“Go1.12.1”,编译器:“GC”,平台:“Linux/AMD64”}

$kubectl获取po、svc、statefulset

> NAME        READY   STATUS    RESTARTS   AGE
> pod/web-0   1/1     Running   0          45m
> pod/web-1   1/1     Running   0          45m
> pod/web-2   1/1     Running   0          45m
> 
> NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
> service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   46m
> service/sfs-svc      ClusterIP   None         <none>        80/TCP    45m
> 
> NAME                   READY   AGE
> statefulset.apps/web   3/3     45m
> 

当我尝试$nslookup sfs-svc.default.svc.cluster.local时

> Server:       127.0.0.53
> Address:  127.0.0.53#53
> 
**> ** server can't find sfs-svc.default.svc.cluster.local: SERVFAIL**
> 

共有1个答案

杜昆琦
2023-03-14

我的第一个猜测是,您正在从localhost而不是从pod内部运行nslookup

我尝试了yaml,只能在从localhost运行nslookup sfs-svc.default.svc.cluster.local时重新生成此问题。

无论如何,要检查服务的DNS条目,请从POD内部运行nslookup。这里有一个例子,

~ $ kubectl run -it --rm --restart=Never dnsutils2 --image=tutum/dnsutils  --command -- bash

root@dnsutils2:/# nslookup sfs-svc.default.svc.cluster.local
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   sfs-svc.default.svc.cluster.local
Address: 172.17.0.6
Name:   sfs-svc.default.svc.cluster.local
Address: 172.17.0.5
Name:   sfs-svc.default.svc.cluster.local
Address: 172.17.0.4

root@dnsutils2:/# exit
 类似资料:
  • 用库伯涅茨-Kafka作为迷你库伯的起点。 这使用StatefulSet和headless服务在集群内进行服务发现。 我们的目标是对外展示各个Kafka经纪人,其内部地址为: 限制是这个外部服务能够专门针对经纪人。 做这件事的正确(或一种可能)方法是什么?是否可以通过< code > Kafka-x . broker . Kafka . SVC . cluster . local:9092 公开外

  • 它显示无头服务是在豆荚顶部创建的。我没有办法强制连接到第一个吊舱或吊舱0或第二个吊舱,即吊舱1。

  • 问题内容: 我正在使用JAX-WS,但是在检索消耗Web服务的客户端信息时遇到问题。我已经找到了如何使用JAX-RPC和Apache Tomcat Axis(而不是JAX-WS)来做到这一点。有人对此有想法吗? 问题答案: 那这个呢:

  • 问题内容: 您经常会看到Node的示例hello world代码,该代码创建Http Server,开始侦听端口,然后执行以下操作: 但理想情况下,您希望这样做: 如何在调用前不将服务器号存储在变量中的情况下检索服务器当前正在侦听的端口? 我之前已经看过这件事,但是在Node文档中找不到。也许这是表达的特定内容? 问题答案: Express 4.x答案: Express 4.x(根据下面的Tien

  • X2.2.0新增 sp_get_user_avatar_url($avatar) 功能: 获取用户头像地址 参数: $avatar: 数据库中保存的用户头像文件路径 返回: 类型string,用户头像地址 使用: $url = sp_get_user_avatar_url('avatart/2231rweqrqwer.png'); echo $url;//输出用户头像地址

  • 问题内容: 这是要求 我想得到这个。 我试过了 它记录。我如何获得价值,为什么会有价值? 问题答案: “ [userId:null]”通常是DOM元素的“ toString”打印输出。如果您执行类似操作,则很有可能 您将看到它是somesort的DOM元素子类。因此,类似: 可能会打印文本节点。