当前位置 : 主页 > 操作系统 > centos >

K8S service (四)

来源:互联网 收集:自由互联 发布时间:2022-06-20
ExternalName 把集群外部的服务引入到集群内部中来,实现了集群内部pod和集群外 部的服务进行通信ExternalName 类型的服务适用于外部服务使用域名的方式,缺点是不能指定端口 注意: 集群

ExternalName

把集群外部的服务引入到集群内部中来,实现了集群内部pod和集群外 部的服务进行通信ExternalName 类型的服务适用于外部服务使用域名的方式,缺点是不能指定端口

注意:

集群内的Pod会继承Node上的DNS解析规则。所以只 要Node可以访问的服务,Pod中也可以访问到, 这就实现了集群内服务 访问集群外服务

一、将公网域名引入

1, 编写YAML文件

vim externelname.yml

apiVersion: v1 kind: Service metadata: name: my-externalname namespace: default spec: type: ExternalName externalName: www.baidu.com # 对应的外部域名为www.baidu.com

2, 应用YAML文件

kubectl apply -f externelname.yml kubectl get svc |grep exter

K8S service (四)

3, 查看my-service的dns解析

dig -t A my-externalname.default.svc.cluster.local.@10.68.153.83

K8S service (四)

kubectl exec -it deploy-nginx-6c9764bb69-7k86s -- /bin/sh/ # nslookup www.baidu.com

K8S service (四)

/ # nslookup my-externalname.default.svc.cluster.local

K8S service (四)

解析此my-externalname.default.svc.cluster.local域名和解析 www.baidu.com是一样的结果

二、不同namespace服务名引入

1, 创建ns1命名空间和相关deploy, pod,service

vim ns1-nginx.yml

apiVersion: v1 kind: Namespace metadata: name: ns1 # 创建ns1命名空间 --- apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nginx namespace: ns1 # 属于ns1命名空间 spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.15-alpine imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: svc1 # 服务名 namespace: ns1 # 属于ns1命名空间 spec: selector: app: nginx clusterIP: None # 无头service ports: - port: 80 targetPort: 80 --- kind: Service apiVersion: v1 metadata: name: external-svc1 namespace: ns1 # 属于ns1命名空间 spec: type: ExternalName externalName: svc2.ns2.svc.cluster.local # 将ns2空间的svc2服务引入到ns1命名空间

kubectl apply -f ns1-nginx.yml

2.创建ns2命名空间和相关deploy, pod,service

vim ns2-nginx.yml

apiVersion: v1 kind: Namespace metadata: name: ns2 # 创建ns2命名空间 --- apiVersion: apps/v1 kind: Deployment metadata: name: deploy-nginx namespace: ns2 # 属于ns2命名空间 spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.15-alpine imagePullPolicy: IfNotPresent ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: svc2 # 服务名 namespace: ns2 # 属于ns2命名空间 spec: selector: app: nginx clusterIP: None # 无头service ports: - port: 80 targetPort: 80 --- kind: Service apiVersion: v1 metadata: name: external-svc2 namespace: ns2 # 属于ns2命名空间 spec: type: ExternalName externalName: svc1.ns1.svc.cluster.local # 将ns1空间的svc1服务引入到ns2命名空间

kubectl apply -f ns2-nginx.yml

3, 在ns1命名空间的pod里验证

kubectl get pods -n ns1kubectl exec -it -n ns1 deploy-nginx-6c9764bb69-g5xl8 -- /bin/sh/ # nslookup svc1/ # nslookup svc2.ns2.svc.cluster.local/ # nslookup external-svc1.ns1.svc.cluster.local. # 将 ns2里的svc2服务引到了ns1里的名字,也可以访问/ # exit

K8S service (四)

kubectl get pods -o wide -n ns1kubectl get pods -o wide -n ns2

K8S service (四)

反之,在ns2命名空间的pod里访问ns1里的service也是OK的(请自行验证)

4, 验证ns2中的pod的IP变化, ns1中的pod仍然可以使用访问

kubectl get pod -n ns2kubectl delete pod deploy-nginx-6c9764bb69-mk62x -n ns2

 因为有replicas控制器,所以删除pod会自动拉一个起来

kubectl get pod -o wide -n ns2

K8S service (四)pod名称变了,IP也变成了172.20.166.187

5.回到ns1中的pod验证

kubectl exec -it -n ns1 deploy-nginx-6c9764bb69-g5xl8 -- /bin/sh/ # ping external-svc1.ns1.svc.cluster.local -c 2/ # exit

K8S service (四)

备注:此博客是观看李腾老师视频后写的,感兴趣的同学可以购买此视频学习k8s知识:https://edu.51cto.com/course/26000.html

上一篇:白话运维监控系统-1.1 运维监控系统概述
下一篇:没有了
网友评论