如何在 Kubernetes 中设置 Pod DNS

ali*_*dii 5 kubernetes kubernetes-statefulset

我想知道是否有任何方法可以为 StatefulSet 中的 Pod 设置 DNS,以便我可以直接调用它们。

我已经阅读了 Kubernetes 文档,但没有看到任何有用的内容。

Har*_*var 3

如果使用带有headless服务的statefulset,则可以直接命中 POD

因此,如果您有三个副本运行 web-0、web-1、web-2,则可以使用curl

web-0.<service-name>.<namespace-name>.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

POD 名称

<pod-name>.<service-name>.<namespace-name>.svc.cluster.local
Run Code Online (Sandbox Code Playgroud)

但重要的是你的服务应该是无头的

例子

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3 
  minReadySeconds: 10 
  template:
    metadata:
      labels:
        app: nginx 
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: registry.k8s.io/nginx
        ports:
        - containerPort: 80
          name: web
Run Code Online (Sandbox Code Playgroud)

官方文档参考:https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#stable-network-id