我试图从docker compose
开始绕过K8。我想用我推到注册表的两个容器设置我的第一个pod。以下问题:
如何通过DNS将IP获取到环境变量中,以便registrator可以连接到consul?请参阅args consul://consul:8500
中的容器注册器。领事需要通过环境进行更改。
{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "service-discovery",
"labels": {
"name": "service-discovery"
}
},
"spec": {
"containers": [
{
"name": "consul",
"image": "eu.gcr.io/{myproject}/consul",
"args": [
"-server",
"-bootstrap",
"-advertise=$(MY_POD_IP)"
],
"env": [{
"name": "MY_POD_IP",
"valueFrom": {
"fieldRef": {
"fieldPath": "status.podIP"
}
}
}],
"imagePullPolicy": "IfNotPresent",
"ports": [
{
"containerPort": 8300,
"name": "server"
},
{
"containerPort": 8400,
"name": "alt-port"
},
{
"containerPort": 8500,
"name": "ui-port"
},
{
"containerPort": 53,
"name": "udp-port"
},
{
"containerPort": 8443,
"name": "https-port"
}
]
},
{
"name": "registrator",
"image": "eu.gcr.io/{myproject}/registrator",
"args": [
"-internal",
"-ip=$(MY_POD_IP)",
"consul://consul:8500"
],
"env": [{
"name": "MY_POD_IP",
"valueFrom": {
"fieldRef": {
"fieldPath": "status.podIP"
}
}
}],
"imagePullPolicy": "Always"
}
]
}
}
答案 0 :(得分:0)
使用Kubernetes中的Service将pod暴露给其他应用程序。一旦您定义了服务,您就可以在您的pod中使用与该服务相关的环境变量。直接暴露Pod并不是一个好主意,因为Pods可能会被重新安排。
例如使用这样的服务:
apiVersion: v1
kind: Service
metadata:
name: consul
namespace: kube-system
labels:
name: consul
spec:
ports:
- name: http
port: 8500
- name: rpc
port: 8400
- name: serflan
port: 8301
- name: serfwan
port: 8302
- name: server
port: 8300
- name: consuldns
port: 8600
selector:
app: consul
相关的环境变量为CONSUL_SERVICE_IP
无论如何,由于here
所述的某些原因,似乎其他人实际上已停止使用该环境变量