我需要将一个ouchDB实例的地址硬编码到我的kubernetes集群中的另一台服务器上。我对kubernetes并不十分熟悉,但是我知道每次重新构建集群或重新构建Pod时IP都会改变。所以我不能使用它。
该kubernetes服务的URL是什么/应该将什么硬编码到我的Server Docker Image中,以便它将始终在系统中找到CouchDB服务器。我认为它将是这种格式
<service-name>.<namespace>.svc.cluster.local:<service-port>
# YAML for launching the server
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: kino-couch
labels:
app: kino-couch
spec:
serviceName: orderer
# Single instance of the Orderer Pod is needed
replicas: 1
selector:
matchLabels:
app: kino-couch
template:
metadata:
labels:
app: kino-couch
spec:
containers:
- name: kino-couch
ports:
- containerPort: 5984
# Image used
image: dpacchain/development:dpaccouch
如果“ wget 172.17.0.2:5984”有效,应将“ 172.17.0.2”替换为
以下内容不正确
wget kino-couch-0.couch-service.default.svc.cluster.local:5984
wget kino-couch-0.couch-service.default.svc.cluster.local:5984
wget kino-couch-0.kino-couch.default.svc.cluster.local:5984
wget kino-couch-0.kino-couchdb.default.svc.cluster.local:5984
wget kino-couch-0.kino-couchdb.svc.cluster.local:5984
答案 0 :(得分:2)
对于StatefulSet,您需要创建一个Headless service来负责Pods的网络标识,以证明其稳定的DNS条目。请注意以下示例中的clusterIP: None
。
apiVersion: v1
kind: Service
metadata:
name: couch-service
labels:
app: kino-couch
spec:
ports:
- port: 5984
clusterIP: None
selector:
app: kino-couch
有状态集需要在serviceName
中引用上述服务。因此,statefulset yaml如下所示
# YAML for launching the server
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: kino-couch
labels:
app: kino-couch
spec:
serviceName: couch-service
# Single instance of the Orderer Pod is needed
replicas: 1
selector:
matchLabels:
app: kino-couch
template:
metadata:
labels:
app: kino-couch
spec:
containers:
- name: kino-couch
ports:
- containerPort: 5984
# Image used
image: dpacchain/development:dpaccouch
然后,作为客户端,您可以使用couch-service.<namespace>.svc.cluster.local:5984
来访问它,以连接到任何CouchDB Pod。
如果要连接到特定的Pod,请使用kino-couch-0.couch-service.<namespace>.svc.cluster.local:5984
。通常,这是在彼此之间连接ouchDB吊舱以创建集群所必需的。