gpt4 book ai didi

docker - Kubernetes、Flannel 和公开服务

转载 作者:行者123 更新时间:2023-12-04 16:36:15 28 4
gpt4 key购买 nike

我有一个运行良好的 kubernetes 设置,但我似乎无法向外部公开服务。我认为我的网络设置不正确:

kubernetes 服务地址:--service-cluster-ip-range=172.16.0.1/16

flannel 网络配置:etcdctl get/test.lan/network/config {"Network":"172.17.0.0/16"}

docker 子网设置:--bip=10.0.0.1/24

主机节点IP:192.168.4.57

我已经运行了 nginx 服务,我试过像这样公开它:

[root@kubemaster ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-px6uy 1/1 Running 0 4m
[root@kubemaster ~]# kubectl get services
NAME LABELS SELECTOR IP(S) PORT(S) AGE
kubernetes component=apiserver,provider=kubernetes <none> 172.16.0.1 443/TCP 31m
nginx run=nginx run=nginx 172.16.84.166 9000/TCP 3m

然后我像这样公开服务:

kubectl expose rc nginx --port=9000 --target-port=9000 --type=NodePort
NAME LABELS SELECTOR IP(S) PORT(S) AGE
nginx run=nginx run=nginx 9000/TCP 292y

我希望现在能够访问主机节点 IP (192.168.4.57) 上的 nginx 容器 - 我是否误解了网络?如果我有,可以解释将不胜感激:(

注意:这是在没有云提供商提供负载均衡器的物理硬件上,所以我认为 NodePort 是我唯一的选择?

最佳答案

所以这里的问题是当您使用 nodePort 时缺少了一 block 拼图。

我也犯了命令错误。

首先,您需要确保公开正确的端口,在本例中为 nginx 的 80:

kubectl expose rc nginx --port=80 --type=NodePort

其次,您需要使用kubectl describe svc nginx,它会向您显示在每个节点上分配的 NodePort:

[root@kubemaster ~]# kubectl describe svc nginx
Name: nginx
Namespace: default
Labels: run=nginx
Selector: run=nginx
Type: NodePort
IP: 172.16.92.8
Port: <unnamed> 80/TCP
NodePort: <unnamed> 32033/TCP
Endpoints: 10.0.0.126:80,10.0.0.127:80,10.0.0.128:80
Session Affinity: None
No events.

您当然可以在部署时分配一个,但我在使用随机分配的端口时缺少此信息。

关于docker - Kubernetes、Flannel 和公开服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34361679/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com