k8s-master | 192.168.233.141 |
k8s-node1 | 192.168.233.142 |
k8s-node2 | 192.168.233.143 |
一 : 采用两个service 两个 Deployment 两个 Ingress 分片数量 replicas 都是1个 会产生两个pod 这两个pod 当中的eureka相互注册
二 : 因为通过网址的形式进行注册 , 所以需要使用到 Headless Service 无头服务
一 :新建 资源清单 eureka01.yaml
二 : 资源清单代码 以及解释
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka01 # Ingress 的名称
namespace: ms # 命名空间 接下来的部署都会使用这个命名空间
spec:
rules:
- host: eureka01.ctnrs.com # 通过 Ingress 映射的地址 , 需要通过host去配置,下面讲解
http:
paths:
- path: /
backend:
serviceName: eureka01 # 这里对应着service 的 名字
servicePort: 8040 # 对应着需要映射的service的端口
---
apiVersion: v1
kind: Service
metadata:
name: eureka01 # Service 的 名称 对应着 Ingress 中的 serviceName: eureka01
namespace: ms
spec:
clusterIP: None # 这就是将这个service 设置为无头服务
ports:
- name: eureka01 # 指定端口的名称
port: 8040
selector:
project: ms
app: eureka01 # 轮询对应 Deployment 中 ms 命名空间的 selector 指定的app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: eureka01
namespace: ms
spec:
replicas: 1
selector:
matchLabels:
project: ms
app: eureka01 # RC通过spec.selector来筛选要控制的Pod
template:
metadata:
labels:
project: ms
app: eureka01
spec:
containers:
- name: eureka01 # pod的名称,必须字段,名称唯一且对象创建后不可以被修改
image: registry.cn-hangzhou.aliyuncs.com/sdongp-dkz/cloud-eureka:1.0-SNAPSHOT # 镜像仓库的路径/镜像的名称:镜像的标签
ports:
- name: http # 指定端口的名称
containerPort: 8040 # pod暴露的端口,此端口仅是额外的信息,对端口是否被暴露没有影响
三 : 运行命令 kubectl apply -f eureka01.yaml
四 : 查看 pod 和 svc 的情况
kubectl get pod -o wide -n ms
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
eureka01-7d57b556df-pjfww 1/1 Running 0 2m17s 10.100.3.60 k8s-node2
kubectl get svc -o wide -n ms
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
eureka01 ClusterIP None 8040/TCP 2m31s app=eureka01,project=ms
五 : 这个时候我们已经创建了一个 eureka
六 : 这个时候还需要配置nginx-ingress 。 不然是没办法在外部访问的 k8s nginx-ingress 的安装
七 : 配置本地的host 文件 添加 映射
# 192.168.233.143 是我nginx-ingress所在的那台 node的IP地址
192.168.233.143 eureka01.ctnrs.com
八 :这个时候就能去访问了 http://eureka01.ctnrs.com:32486/
一 : 新建 eureka02.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka02 # Ingress 的名称
namespace: ms # 命名空间 接下来的部署都会使用这个命名空间
spec:
rules:
- host: eureka02.ctnrs.com # 通过 Ingress 映射的地址 , 需要通过host去配置,下面讲解
http:
paths:
- path: /
backend:
serviceName: eureka02 # 这里对应着service 的 名字
servicePort: 8040 # 对应着需要映射的service的端口
---
apiVersion: v1
kind: Service
metadata:
name: eureka02 # Service 的 名称 对应着 Ingress 中的 serviceName: eureka02
namespace: ms
spec:
clusterIP: None # 这就是将这个service 设置为无头服务
ports:
- name: eureka02 # 指定端口的名称
port: 8040
selector:
project: ms
app: eureka02 # 轮询对应 Deployment 中 ms 命名空间的 selector 指定的app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: eureka02
namespace: ms
spec:
replicas: 1
selector:
matchLabels:
project: ms
app: eureka02 # RC通过spec.selector来筛选要控制的Pod
template:
metadata:
labels:
project: ms
app: eureka02
spec:
containers:
- name: eureka02 # pod的名称,必须字段,名称唯一且对象创建后不可以被修改
image: registry.cn-hangzhou.aliyuncs.com/sdongp-dkz/cloud-eureka:1.0-SNAPSHOT # 镜像仓库的路径/镜像的名称:镜像的标签
ports:
- name: http # 指定端口的名称
containerPort: 8040 # pod暴露的端口,此端口仅是额外的信息,对端口是否被暴露没有影响
二 :其他步骤一样 因为已经添加了 nginx-ingress 所以不需要在去添加了
这个时候去访问的时候我们就能访问到两个eureka了
这一个是 pod 是在 60 的ip地址的
这一个是pod在 61 端口的
eureka:
client:
#false表示不向注册中心注册自己。
# register-with-eureka: false
#false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址。
defaultZone: http://eureka01.ms.svc.cluster.local:${server.port}/eureka/,http://eureka02.ms.svc.cluster.local:${server.port}/eureka/
这里是一个很关键的点 这里有 这样的 两个网址 http://eureka01.ms.svc.cluster.local:${server.port}/eureka/
这里就是应为使用了 k8s的无头服务 。所以没有ip 而无头服务默认的 网址组成规则是
http://{serviceName}.{namespaceName}.svc.cluster.local
解释
{serviceName} 就是我们在新增 eureka01 的时候 service 当中的 name 对应的 eureka01
{namespaceName} 命名空间的名称 ms
svc.cluster.local 是k8s 默认的集群名称
在这里就完成了一个eureka的集群部署了
springcloud 地址