目录
环境准备
mac本机设置通过ip访问自身k8s service
brew安装docker-connector
配置brew的docker-connector
映射本机网络到docker容器
内网中其他机器通过ip访问这个k8s service
配置内网中的dns解析
安装dnsmasq
开放k8s CoreDns
配置dnsmasq
参考资料
环境准备期待效果:我们在 default 命名空间创建一个nginx的deployment,对应service名称是 nginx-service 80端口开放clusterIp访问,期待内网中其他机器(不一定在集群中)输入 http://nginx-service.default.svc.cluster.local/ 能访问到nginx服务
nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s.kuboard.cn/layer: web
k8s.kuboard.cn/name: nginx
name: nginx
spec:
selector:
matchLabels:
k8s.kuboard.cn/layer: web
k8s.kuboard.cn/name: nginx
template:
metadata:
labels:
k8s.kuboard.cn/layer: web
k8s.kuboard.cn/name: nginx
spec:
containers:
- image: 'nginx:alpine'
name: nginx
ports:
- containerPort: 80
name: http
protocol: TCP
nginx-service.yaml
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
k8s.kuboard.cn/name: nginx
type: ClusterIP
执行成功后效果如下:
为了达到 内网中其他机器(不一定在集群中)输入 http://nginx-service.default.svc.cluster.local/ 能访问到nginx服务,需要满足3个条件
- 内网中所有机器的dns解析 nginx-service.default.svc.cluster.local 时能够拿到 10.103.15.56 这个ip
- k8s集群中的机器访问 10.103.15.56 这个ip能够看到nginx的页面
- 内网中非集群的机器访问 10.103.15.56 这个ip能够看到nginx的页面
经过测试,如果k8s集群是linux的,第二个条件 “k8s集群中的机器访问 10.103.15.56 这个ip能够看到nginx的页面” 是可行的,如果你的情况属于这一种,可以直接跳过下一步,然而我的是k8s是mac的docker搭建的,自己电脑访问这个ip是无法访问的。
mac本机设置通过ip访问自身k8s service brew安装docker-connector安装命令如下:
brew install wenjunxiao/brew/docker-connector
配置brew的docker-connector
希望暴露k8s的 10.103.0.0/16 这个ip段给本机访问,于是 `vim /usr/local/etc/docker-connector.conf` 增加一行配置
route 10.103.0.0/16 expose
expose 0.0.0.0:2512 #开放端口给其他机器访问
token user1 192.168.31.103 #配置机器的token
映射本机网络到docker容器
一条命令映射docker-connector到docker容器
docker run -it -d --restart always \
--net host --cap-add NET_ADMIN \
--name connector wenjunxiao/mac-docker-connector
至此,本机可以通过ip访问k8s的这个clusterIP的service了,附上效果图
其他机器如果想要访问你本地容器需要安装docker-accessor
brew install wenjunxiao/brew/docker-accessor
安装完成之后,需要从容器提供者获取地址和token之后使用sudo
运行
sudo docker-accessor -remote 192.168.31.17:2512 -token user1
内网中其他机器通过ip访问这个k8s service
为了让内网中的其他机器输入 10.103.15.56 这个ip也能够访问这个nginx,需要让这个ip的流量自动转发到那台k8s机器上,也就是让这台k8s机器成为 10.103.0.0/16 这个网段流量的中转机器。实现方式有两种:
1. 通过路由器设置ip段转发
2. 在每台电脑上通过route命令配置ip段的流量转发
这里使用第二种方法,linux机器上的命令为
sudo route add -net 10.103.0.0 netmask 255.255.0.0 gw 192.168.31.17
配置内网中的dns解析
安装dnsmasq
内网dns软件首选dnsmasq,mac安装命令是
brew install dnsmasq
开放k8s CoreDns
coredns-service.yaml,coredns 的 udp 53端口映射到节点上的 32192 端口
---
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/port: '9153'
prometheus.io/scrape: 'true'
labels:
k8s-app: kube-dns
kubernetes.io/cluster-service: 'true'
kubernetes.io/name: CoreDNS
name: kube-dns
namespace: kube-system
spec:
ports:
- name: dns
nodePort: 32192
port: 53
protocol: UDP
targetPort: 53
- name: dns-tcp
nodePort: 32192
port: 53
protocol: TCP
targetPort: 53
- name: metrics
nodePort: 31144
port: 9153
protocol: TCP
targetPort: 9153
selector:
k8s-app: kube-dns
type: NodePort
配置dnsmasq
mac上的路径为 /usr/local/etc/dnsmasq.conf,linux上的路径为 /etc/dnsmasq.conf,增加如下配置,指定k8s service的域名dns走本机的 32192 这个端口查询ip :
server=/svc.cluster.local/127.0.0.1#32192
配置完成后重启dnsmasq,mac命令是
sudo brew services start dnsmasq
linux命令是
sudo systemctl restart dnsmasq
最后设置电脑的dns服务器地址是 内网dns服务器的地址,方法省略,企业里通常是在路由器上设置dns地址。最后看看效果吧
参考资料mac/windows docker容器ip开放给宿主机 https://blog.csdn.net/adparking/article/details/114026613
dnsmasq安装使用教程 https://xdhuxc.github.io/posts/common/dns/dns-dnsmasq/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)