验证Kubernetes的服务发现机制

验证Kubernetes的服务发现机制

服务发现是让客户端能够以固定的方式获取到后端Pod访问地址的机制。下面验证环境变量和DNS这两种机制。

一、验证基于环境变量的服务发现机制

对于需要访问服务的Pod,必须在该Pod创建之前创建Service。

(1)创建Service。

[root@master ~]# vim nginx-deploy-service.yaml
[root@master ~]# cat nginx-deploy-service.yaml 
apiVersion: apps/v1                		# 版本号
kind: Deployment                    	# 类型为Deployment
metadata:                            	# 元数据
  name: nginx-deploy          
  labels:                             	# 标签
    app: nginx-deploy
spec:                                 	# 详细信息
  replicas: 2                        	# 副本数量
  selector:                          	# 选择器,指定该控制器管理哪些Pod
    matchLabels:                     	# 匹配规则
      app: nginx-pod
  template:                          	# 定义模板,当副本数量不足时会根据模板定义创建Pod副本
    metadata:
      labels:
        app: nginx-pod                  # Pod的标签
    spec:
      containers:                     	# 容器列表(本例仅定义一个容器)
      - name: nginx                   	# 容器的名称
        image: nginx:1.14.2          	# 容器所用的镜像
        ports:
        - name: nginx-port
          containerPort: 80         	# 容器需要暴露的端口

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc      					#设置service的显示名字
spec:
  ports:
  - port: 8080              			#让集群知道service绑定的端口
    targetPort: 80           			#目标Pod的端口
  selector:
    app: nginx-pod  					#指定pod的标签

[root@master ~]# 

(2)执行一次性创建Deployment和Service

[root@master ~]# kubectl apply -f nginx-deploy-service.yaml 
deployment.apps/nginx-deploy created
service/nginx-svc created
[root@master ~]# 

(3)基于镜像创建一个Pod

[root@master ~]# kubectl run nginx --image=nginx:1.14.2
pod/nginx created
[root@master ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
nginx                           1/1     Running   0          3s
nginx-deploy-59c566bbbb-cm4bz   1/1     Running   0          17m
nginx-deploy-59c566bbbb-n7qsz   1/1     Running   0          17m

(4)执行以下命令列出该Pod的环境变量,并筛选出含NGINX的环境变量

[root@master ~]# kubectl exec nginx -- printenv | grep NGINX
NGINX_SVC_PORT_8080_TCP=tcp://10.108.118.39:8080
NGINX_SVC_SERVICE_PORT=8080
NGINX_SVC_PORT_8080_TCP_PROTO=tcp
NGINX_SVC_SERVICE_HOST=10.108.118.39
NGINX_SVC_PORT=tcp://10.108.118.39:8080
NGINX_SVC_PORT_8080_TCP_PORT=8080
NGINX_SVC_PORT_8080_TCP_ADDR=10.108.118.39
NGINX_VERSION=1.14.2-1~stretch
[root@master ~]# 

此pod的环境变量中就包含以上Service的主机地址和端口,可以引用这些环境变量来访问Service

(5)删除该pod

[root@master ~]# kubectl delete po nginx
pod "nginx" deleted
[root@master ~]# kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
nginx-deploy-59c566bbbb-cm4bz   1/1     Running   0          19m
nginx-deploy-59c566bbbb-n7qsz   1/1     Running   0          19m
[root@master ~]# 

(6)创建测试用的名称空间

[root@master ~]# kubectl create namespace test-ns
namespace/test-ns created
[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   26d
kube-node-lease   Active   26d
kube-public       Active   26d
kube-system       Active   26d
test-ns           Active   3s

(7)创建一个属于test-ns名称空间的pod

[root@master ~]# kubectl run nginx --image=nginx:1.14.2 -n test-ns
pod/nginx created

(8)查看名称空间test-ns中名称为nginx的pod相关环境变量

[root@master ~]# kubectl exec nginx -n test-ns -- printenv | grep NGINX
NGINX_VERSION=1.14.2-1~stretch

可以发现没有与Service相关的环境变量,这是因为该pod与该service分属不同的名称空间,该service属于默认的名称空间,彼此隔离,无法访问

(9)删除新创建的pod

[root@master ~]# kubectl delete pod nginx -n test-ns
pod "nginx" deleted
[root@master ~]# kubectl get pod  -n test-ns
No resources found in test-ns namespace.
[root@master ~]# kubectl delete -f nginx-deploy-service.yaml 
deployment.apps "nginx-deploy" deleted
service "nginx-svc" deleted

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值