有时候我们需要将k8s
集群外的服务引入到集群内部来,便于集群内部服务调用,我可以使用Endpoints
.
引入外部myql
编写k8s-mysql-endpoints.yaml
为外部Mysql
创建Endpoints
apiVersion: v1
kind: Endpoints
metadata:
name: mysql
namespace: default
subsets:
- addresses:
- ip: 192.168.1.11
ports:
- port: 20030
- 可以使用命令
kubectl get endpoints
查看是否创建完成 kubectl describe endpoints mysql
查看具体描述
编写k8s-mysql-service.yaml
编写k8s-mysql-service.yaml
,为endpoints
发布成内部pod
可以调用的服务
注意
metadata.name
与k8s-mysql-endpoints.yaml
中metadata.name
保持一致,此处均为mysql
.
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 20030
- 可以使用命令
kubectl get svc
查看是否服务创建完成 kubectl describe svc mysql
查看具体服务描述
测试endpoints是否生效
为了方便测试endpoints
是否生效,我们修改上述的k8s-mysql-service.yaml
配置
- 我们将
type
类型改为NodePort
,这样可以设定宿主机上的映射端口号nodePort:30030
,这样直接通过宿主机IP:30030
就可以调用到mysql
服务。- 注意删除了创建好的
service
,对应的endpoints
也会删除掉,需要重新创建!测试的时候注意!
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: NodePort
ports:
- port: 20030
targetPort: 20030
protocol: TCP
nodePort: 30030
使用Navicat
测试
使用Navicat
测试,输入宿主机IP
和端口30030
(用户名密码还是外部数据库原本的用户名密码),测试连接!成功!证明了通过Endpoints
机制可以将外部服务发布成k8s
内部的服务!
发布外部的
redis
服务也是同理,只需要修改name
、port
、ip
等参数即可!