K8s中 loadBalancer类型的service在没有外部ip的情况下如何 访问?

作者站长头像
站长
· 阅读数 6

在 play-with-k8s https://labs.play-with-k8s.com/ 搭建了一个k8s集群,部署了一个service

apiVersion: v1
kind: Service
metadata:
  name: my-nginx-svc
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

K8s中 loadBalancer类型的service在没有外部ip的情况下如何 访问?


  1. get service的情况K8s中 loadBalancer类型的service在没有外部ip的情况下如何 访问?
  2. get pods的情况K8s中 loadBalancer类型的service在没有外部ip的情况下如何 访问?

每一个pod中都有一个nginx容器,我手动进入到了每一个nginx容器中 修改index.htmll 为1111,22,333.

问题: service 是loadbalancer类型,且没有外部ip 我该如何 通过service 访问 到后端三个nginx容器, 从而看到负载均衡的情况。

尝试的方案:

1.因为没有外部ip,所以无法通过外部ip访问service,只能通过内部ip

所以我进入到了 其中的一个 nginx容器,然后执行 curl http://service-clusterip:80 端口访问,但是nginx容器中 没有curl命令, 也没有 ping 等等命令。

然后我使用你 apt install curl 安装curl,提示 无法解析域名 http://deb.debian.org/debian

然后我又修改 nginx容器的 /etc/apt/sources.list 改为 阿里源,清华源都不行,都是无法解析域名。 感觉好像是 容器被限制了无法访问到外部互联网。 但是在node节点上是可以访问百度、阿里等外部网络的。

K8s中 loadBalancer类型的service在没有外部ip的情况下如何 访问?

K8s中 loadBalancer类型的service在没有外部ip的情况下如何 访问?

回复
1个回答
avatar
test
2024-06-19

1、要想访问nginx服务,可以新建一个类型为nodePort的service服务,或者将原来的loadblance类型的服务改为nodePort类型,这样就可以通过节点的ip和端口访问到nginx,或者可以搭建MetalLB负载均衡器,也可以自动分配loadblance ip;

2、容器无法解析外部域名,可以查看coredns的配置,看看上游域名解析配的是什么,如下是我的codedns配置,圈红部分表示上游dns服务器继承节点的dns配置,所以我的pod可以通过节点配置的dns解析到外网的域名上,这里面还有个前提就是pod能够访问外网。answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容