如何使用 rancher-server 从另一台机器访问服务?
How to acess an service from another machine unsing rancher-server?
我正在尝试在本地网络上使用 rancher 创建一个 docker 服务器(有很多机器,一些 linux,一些 windows)。我已经安装了 rancher-server,创建了一个主机,添加了一个 API 来测试并创建了一个负载平衡器来注册这个 API。在本地,工作正常,我可以访问 API 容器,如:“http://test.172.17.0.4.xip.io:3000/”,但在我网络中的其他机器上,我无法访问..
PS:
test
-> API 姓名
172.17.0.4
-> HOST 机器的 IP docker(带有 rancher-agent)
xip.io
-> public 通配符 DNS(请参阅:http://xip.io/)
3000
-> API 负载均衡器中映射的端口
我曾尝试更改 rancher UI 中容器的网络,但没有成功,我阅读了一些有关创建 docker 网络的内容,但我有点困惑,因为docker创建一个默认网络docker,docker0,是一个桥接网络。我对网络问题有点了解。
编辑:
我使用 docker 网络创建了 macvlan,现在我可以使用其他机器 ping 到我的容器,但是现在,我的容器没有互联网连接来下载东西。
docker network create -d macvlan --subnet=172.16.108.0/26 --gateway=172.16.108.1 -o macvlan_mode=bridge -o parent=enp1s0 rancher
并尝试运行这个网络中的一个容器
编辑 2:
这个ifconfig
输出
docker0: 标志=4099 mtu 1500
inet 172.17.0.1 网络掩码 255.255.0.0 广播 172.17.255.255
ether 02:42:79:4f:fc:66 txqueuelen 0(以太网)
RX 数据包 0 字节 0 (0.0 B)
RX 错误 0 在 运行s 0 帧 0 内丢弃 0
TX 数据包 0 字节 0 (0.0 B)
TX 错误 0 丢弃 0 超过 运行s 0 载波 0 冲突 0
enp1s0: 标志=4163 mtu 1500
inet 172.16.108.1 网络掩码 255.255.255.192 广播 172.16.108.63
inet6 fe80::593f:24d0:31f2:4fd8 prefixlen 64 scopeid 0x20
ether d0:94:66:a5:29:8f txqueuelen 1000(以太网)
RX 数据包 1251 字节 1024069 (1000.0 KiB)
RX 错误 0 在 运行s 0 帧 0 内丢弃 5
TX 数据包 980 字节 157904 (154.2 KiB)
TX 错误 0 丢弃 0 超过 运行s 0 载波 0 冲突 0
lo: 标志=73 mtu 65536
inet 127.0.0.1 网络掩码 255.0.0.0
inet6 :: 1 prefixlen 128 scopeid 0x10
循环 txqueuelen 1000(环回本地)
RX 数据包 0 字节 0 (0.0 B)
RX 错误 0 在 运行s 0 帧 0 内丢弃 0
TX 数据包 0 字节 0 (0.0 B)
TX 错误 0 丢弃 0 超过 运行s 0 载波 0 冲突 0
编辑 3:
当启动 rancher and/or 主机时,我试图指定传递标志 --address 的 ip 地址,结果是相同的:unknown flag: --address
我尝试执行的命令是:
docker run -d --restart=unless-stopped --address 172.16.108.63 -p 8080:8080 rancher/server
启动牧场服务器。我也试过 macvlan
docker run --privileged --name some-docker1 --address 172.16.108.63 -d docker:stable-dind
启动牧场主机器(成为未来的主人)
我在上面尝试了相同的命令,但没有 --address。然后,附加在容器的 shell 中,我尝试创建主机
docker run -e CATTLE_AGENT_IP="172.17.0.3" --rm --privileged --address 172.16.108.63 -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher ran
cher/agent:v1.2.11 http://172.17.0.2:8080/v1/scripts/3FA0E7B767770264BCAD:1546214400000:P9NfsauqyhZpoeIBgGyCZIHkKtE
结果是一样的..
恢复:
我正在尝试在我的本地网络中创建一个 rancher-server 以从同一网络中的其他机器访问我的负载均衡器中的应用程序。
编辑 2:需要使用 CATTLE_AGENT_IP 指定要添加的主机的 IP 地址。我在之前的编辑中弄错了版本。
编辑 1:
当 rancher 服务器和代理镜像使用同一主机 运行 时,使用标志 --address <IP address>
指定主机的 IP 地址很重要。否则,自动检测到的 IP 地址将不正确。
在您的情况下,您需要在注册主机时指定--address 172.16.108.63
。
然后生成的 xip 地址将反映正确的 IP 地址。
====
这是一种能够从集群外部访问您的应用程序的方法。这涉及到 Ingress 的使用。 (查看此处了解更多信息:https://kubernetes.io/docs/concepts/services-networking/ingress/)
第 1 步:创建部署(根据需要更改图像和自定义其他选项)
apiVersion: apps/v1
kind: Deployment
metadata:
name: app1
spec:
replicas: 1
selector:
matchLabels:
name: app1
template:
metadata:
labels:
name: app1
spec:
containers:
- name: app1
image: leodotcloud/swiss-army-knife
ports:
- containerPort: 80
name: http
env:
- name: NATO_ALPHABET
value: "a"
第 2 步:创建服务(可以直接创建入口,但我喜欢保持隔离)
apiVersion: v1
kind: Service
metadata:
labels:
name: access-app1
name: access-app1
spec:
ports:
- port: 80
targetPort: 80
selector:
name: app1
第 3 步:创建 Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-app1
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /app1
backend:
serviceName: access-app1
servicePort: 80
现在您的应用程序将在 http://<HOST_IP_ADDRESS>/app1
可用
我正在尝试在本地网络上使用 rancher 创建一个 docker 服务器(有很多机器,一些 linux,一些 windows)。我已经安装了 rancher-server,创建了一个主机,添加了一个 API 来测试并创建了一个负载平衡器来注册这个 API。在本地,工作正常,我可以访问 API 容器,如:“http://test.172.17.0.4.xip.io:3000/”,但在我网络中的其他机器上,我无法访问..
PS:
test
-> API 姓名
172.17.0.4
-> HOST 机器的 IP docker(带有 rancher-agent)
xip.io
-> public 通配符 DNS(请参阅:http://xip.io/)
3000
-> API 负载均衡器中映射的端口
我曾尝试更改 rancher UI 中容器的网络,但没有成功,我阅读了一些有关创建 docker 网络的内容,但我有点困惑,因为docker创建一个默认网络docker,docker0,是一个桥接网络。我对网络问题有点了解。
编辑:
我使用 docker 网络创建了 macvlan,现在我可以使用其他机器 ping 到我的容器,但是现在,我的容器没有互联网连接来下载东西。
docker network create -d macvlan --subnet=172.16.108.0/26 --gateway=172.16.108.1 -o macvlan_mode=bridge -o parent=enp1s0 rancher
并尝试运行这个网络中的一个容器
编辑 2:
这个ifconfig
输出
docker0: 标志=4099 mtu 1500 inet 172.17.0.1 网络掩码 255.255.0.0 广播 172.17.255.255 ether 02:42:79:4f:fc:66 txqueuelen 0(以太网) RX 数据包 0 字节 0 (0.0 B) RX 错误 0 在 运行s 0 帧 0 内丢弃 0 TX 数据包 0 字节 0 (0.0 B) TX 错误 0 丢弃 0 超过 运行s 0 载波 0 冲突 0
enp1s0: 标志=4163 mtu 1500 inet 172.16.108.1 网络掩码 255.255.255.192 广播 172.16.108.63 inet6 fe80::593f:24d0:31f2:4fd8 prefixlen 64 scopeid 0x20 ether d0:94:66:a5:29:8f txqueuelen 1000(以太网) RX 数据包 1251 字节 1024069 (1000.0 KiB) RX 错误 0 在 运行s 0 帧 0 内丢弃 5 TX 数据包 980 字节 157904 (154.2 KiB) TX 错误 0 丢弃 0 超过 运行s 0 载波 0 冲突 0
lo: 标志=73 mtu 65536 inet 127.0.0.1 网络掩码 255.0.0.0 inet6 :: 1 prefixlen 128 scopeid 0x10 循环 txqueuelen 1000(环回本地) RX 数据包 0 字节 0 (0.0 B) RX 错误 0 在 运行s 0 帧 0 内丢弃 0 TX 数据包 0 字节 0 (0.0 B) TX 错误 0 丢弃 0 超过 运行s 0 载波 0 冲突 0
编辑 3:
当启动 rancher and/or 主机时,我试图指定传递标志 --address 的 ip 地址,结果是相同的:unknown flag: --address
我尝试执行的命令是:
docker run -d --restart=unless-stopped --address 172.16.108.63 -p 8080:8080 rancher/server
启动牧场服务器。我也试过 macvlan
docker run --privileged --name some-docker1 --address 172.16.108.63 -d docker:stable-dind
启动牧场主机器(成为未来的主人)
我在上面尝试了相同的命令,但没有 --address。然后,附加在容器的 shell 中,我尝试创建主机
docker run -e CATTLE_AGENT_IP="172.17.0.3" --rm --privileged --address 172.16.108.63 -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher ran
cher/agent:v1.2.11 http://172.17.0.2:8080/v1/scripts/3FA0E7B767770264BCAD:1546214400000:P9NfsauqyhZpoeIBgGyCZIHkKtE
结果是一样的..
恢复: 我正在尝试在我的本地网络中创建一个 rancher-server 以从同一网络中的其他机器访问我的负载均衡器中的应用程序。
编辑 2:需要使用 CATTLE_AGENT_IP 指定要添加的主机的 IP 地址。我在之前的编辑中弄错了版本。
编辑 1:
当 rancher 服务器和代理镜像使用同一主机 运行 时,使用标志 --address <IP address>
指定主机的 IP 地址很重要。否则,自动检测到的 IP 地址将不正确。
在您的情况下,您需要在注册主机时指定--address 172.16.108.63
。
然后生成的 xip 地址将反映正确的 IP 地址。
====
这是一种能够从集群外部访问您的应用程序的方法。这涉及到 Ingress 的使用。 (查看此处了解更多信息:https://kubernetes.io/docs/concepts/services-networking/ingress/)
第 1 步:创建部署(根据需要更改图像和自定义其他选项)
apiVersion: apps/v1
kind: Deployment
metadata:
name: app1
spec:
replicas: 1
selector:
matchLabels:
name: app1
template:
metadata:
labels:
name: app1
spec:
containers:
- name: app1
image: leodotcloud/swiss-army-knife
ports:
- containerPort: 80
name: http
env:
- name: NATO_ALPHABET
value: "a"
第 2 步:创建服务(可以直接创建入口,但我喜欢保持隔离)
apiVersion: v1
kind: Service
metadata:
labels:
name: access-app1
name: access-app1
spec:
ports:
- port: 80
targetPort: 80
selector:
name: app1
第 3 步:创建 Ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-app1
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /app1
backend:
serviceName: access-app1
servicePort: 80
现在您的应用程序将在 http://<HOST_IP_ADDRESS>/app1