好吧,遵循Kubernetes網站上的示例和文檔以及對Google的廣泛研究,我仍然無法在我的Pod中的容器之間獲得DNS解析。DNS不與Kubernetes PetSet一起工作
我有一個Service和PetSet定義了2個容器。當我部署PetSet和Service時,它們會啓動併成功運行,但如果我嘗試通過主機名或完整域名來ping另一個容器的主機,則我無法訪問目標。我可以通過IP地址ping通。
這裏是我的Kubernetes配置文件:
apiVersion: v1
kind: Service
metadata:
name: ml-service
labels:
app: marklogic
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
#restartPolicy: OnFailure
clusterIP: None
selector:
app: marklogic
ports:
- protocol: TCP
port: 7997
#nodePort: 31997
name: ml7997
- protocol: TCP
port: 8000
#nodePort: 32000
name: ml8000
# ... More ports defined
#type: NodePort
---
apiVersion: apps/v1alpha1
kind: PetSet
metadata:
name: marklogic
spec:
serviceName: "ml-service"
replicas: 2
template:
metadata:
labels:
app: marklogic
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
terminationGracePeriodSeconds: 30
containers:
- name: 'marklogic'
image: "{local docker registry ip}:5000/dcgs-sof/ml8-docker-final:v1"
imagePullPolicy: Always
command: ["/opt/entry-point.sh", "-l", "/opt/mlconfig.sh"]
ports:
- containerPort: 7997
name: ml7997
- containerPort: 8000
name: ml8000
- containerPort: 8001
name: ml8001
- containerPort: 8002
name: ml8002
- containerPort: 8040
name: ml8040
- containerPort: 8041
name: ml8041
- containerPort: 8042
name: ml8042
- containerPort: 8050
name: ml8050
- containerPort: 8051
name: ml8051
- containerPort: 8060
name: ml8060
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
lifecycle:
preStop:
exec:
command: ["/etc/init.d/MarkLogic stop"]
volumeMounts:
- name: ml-data
mountPath: /data
volumeClaimTemplates:
- metadata:
name: ml-data
annotations:
volume.alpha.kubernetes.io/storage-class: anything
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
我註釋掉type: NodePort
定義我認爲可能是罪魁禍首,但仍然沒有成功。
此外,如果我運行[email protected]:/$ docker exec b4d21c4bc065 /bin/bash -c 'nslookup marklogic-1.marklogic.default.svc.cluster.local'
它不能解析名稱。
我失蹤了什麼?
感謝您的快速回復! 因此,在我的服務配置中,我最初創建它作爲無頭服務。如果我將clusterIP設置爲類似10.0.0.199而不是None的地址,nslookup將失敗,但我可以通過主機訪問我的容器。使用None作爲clusterIP,主機可以在內部看到對方,但我無法在外部訪問。這很混亂!有什麼建議麼? – millerbill3
如果您想在外部訪問它們,您需要支持它的雲提供商的服務類型「LoadBalancer」。如果你想在外部公開它,我建議創建一個單獨的服務。 –