Charlie
Charlie

Reputation: 541

Hostname of pods in same statefulset can not be resolved

I am configuring a statefulset deploying 2 Jira DataCenter nodes. The statefulset results in 2 pods. Everything seems fine until the 2 pods try to connect to eachother. They do this with their short hostname being jira-0 and jira-1.

The jira-1 pod reports UnknownHostException when connecting to jira-0. The hostname can not be resolved.

I read about adding a headless service which I didn't have yet. After adding that I can resolve the FQDN but still no luck for the short name.

Then I read this page: DNS for Services and Pods and added:

      dnsConfig:
        searches:
          - jira.default.svc.cluster.local

That solves my issue but I think it shouldn't be necessary to add this?

Some extra info:

My full yaml file:

apiVersion: v1
kind: Service
metadata:
  name: jira
  labels:
    app: jira
spec:
  clusterIP: None
  selector:
    app: jira
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: jira
spec:
  serviceName: jira
  replicas: 0
  selector:
    matchLabels:
      app: jira
  template:
    metadata:
      labels:
        app: jira
    spec:
      containers:
      - name: jira
        image: atlassian/jira-software:8.12.2-jdk11
        readinessProbe:
          httpGet:
            path: /jira/status
            port: 8080
          initialDelaySeconds: 120
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /jira/
            port: 8080
          initialDelaySeconds: 600
          periodSeconds: 10
        envFrom:
          – configMapRef:
              name: jira-config
        ports:
        - containerPort: 8080
      dnsConfig:
        searches:
          - jira.default.svc.cluster.local

Upvotes: 2

Views: 1936

Answers (1)

Jonas
Jonas

Reputation: 128837

That solves my issue but I think it shouldn't be necessary to add this?

From the StatefulSet documentation:

StatefulSets currently require a Headless Service to be responsible for the network identity of the Pods. You are responsible for creating this Service.

The example above will create three Pods named web-0,web-1,web-2. A StatefulSet can use a Headless Service to control the domain of its Pods.

The pod-identity is will be subdomain to the governing service, eg. in your case it will be e.g:

jira-0.jira.default.svc.cluster.local
jira-1.jira.default.svc.cluster.local

Upvotes: 2

Related Questions