|NO.Z.00158|——————————|CloudNative|——|KuberNetes&服务发布.V09|——|service.v01|service代理外部服务|
一、使用service代理k8s外部应用
### --- service代理k8s外部应用使用场景
~~~ 希望在生产环境中使用某个固定的名称而非IP地址进行访问外部的中间件服务
~~~ 希望Service指向另一个Namespace中或其他集群中的服务
~~~ 某个项目正在迁移至k8s集群,但是一部分服务仍然在集群外部,
~~~ 此时可以使用service代理至k8s集群外部的服务
二、使用service代理k8s外部应用
### --- 编写使用service代理k8s外部应用yaml配置文件
~~~ # 编写service.yaml配置文件
~~~ 它是没有selector,不去匹配它的namespace下的Pod,而是去创建一个
[root@k8s-master01 ~]# cat nginx-svc-external.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-svc-external
name: nginx-svc-external
spec:
ports:
- name: http # Service端口的名称
port: 80 # Service自己的端口, servicea --> serviceb http://serviceb, http://serviceb:8080
protocol: TCP # UDP TCP SCTP default: TCP
targetPort: 80 # 后端应用的端口
sessionAffinity: None
type: ClusterIP
### --- 创建service代理k8s外部应用的pod
~~~ # 创建service.pod
[root@k8s-master01 ~]# kubectl create -f nginx-svc-external.yaml
service/nginx-svc-external created
~~~ # 查看创建的service
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d
nginx-svc ClusterIP 10.101.145.83 <none> 80/TCP,443/TCP 19h
nginx-svc-external ClusterIP 10.97.162.95 <none> 80/TCP 4s
~~~ # 查看创建的endpoints
~~~ 没有生成endpoints,可以自己手动创建一个
[root@k8s-master01 ~]# kubectl get ep //可以看到没有selector参数的service它是没有ep的
NAME ENDPOINTS AGE
kubernetes 192.168.1.11:6443,192.168.1.12:6443,192.168.1.13:6443 11d
nginx-svc 172.17.125.13:443,172.18.195.18:443,172.17.125.13:80 + 1 more... 19h
### --- 手动创建一个service对应的endpoints
~~~ # 创建endpoints.yaml配置文件
[root@k8s-master01 ~]# kubectl get ep nginx-svc -oyaml > nginx-ep-external.yaml
[root@k8s-master01 ~]# vim nginx-ep-external.yaml
apiVersion: v1
kind: Endpoints
metadata:
labels:
app: nginx-svc-external
name: nginx-svc-external // 它要和service的名称一致,一致就会去建立连接
namespace: default
subsets:
- addresses:
- ip: 220.181.38.148 // 写外部服务的IP地址,比如我们需要访问百度的吧。
ports:
- name: http
port: 80 // 外部服务的端口号。
protocol: TCP // 协议也要一致
~~~ # 获取百度外部代理IP地址
[root@k8s-master01 ~]# ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
### --- 创建service对应的endpoints
~~~ # 创建service对应的endpoints
[root@k8s-master01 ~]# kubectl create -f nginx-ep-external.yaml
endpoints/nginx-svc-external created
You have new mail in /var/spool/mail/root
~~~ # 查看创建的endpoints
[root@k8s-master01 ~]# kubectl get ep
NAME ENDPOINTS AGE
kubernetes 192.168.1.11:6443,192.168.1.12:6443,192.168.1.13:6443 11d
nginx-svc 172.17.125.13:443,172.18.195.18:443,172.17.125.13:80 + 1 more... 20h
nginx-svc-external 220.181.38.148:80 // 这是我们手动创建endPoint,和我们的service是同名的
### --- 验证代理的外部应用百度是否代理成功
~~~ # curl访问百度是否可以获取到数据
[root@k8s-master01 ~]# curl baidu.com -I
HTTP/1.1 200 OK // curl请求值是200,
Date: Wed, 21 Apr 2021 06:46:59 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Thu, 22 Apr 2021 06:46:59 GMT
Connection: Keep-Alive
Content-Type: text/html
~~~ # 请求一下对应的service,是否和直接curl百度的数据一致
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 11d
nginx-svc ClusterIP 10.101.145.83 <none> 80/TCP,443/TCP 20h
nginx-svc-external ClusterIP 10.97.162.95 <none> 80/TCP 8m41s
~~~ # 通过service代理获取的百度的数据
~~~ 可以看到直接curl百度数据和curl.service的数据一致,
~~~ 说明service代理k8s外部应用OK
[root@k8s-master01 ~]# curl 10.97.162.95 -I // 可以看到返回值是一样的,所以说它已经代理到百度上去了。
HTTP/1.1 200 OK
Date: Wed, 21 Apr 2021 06:48:37 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Thu, 22 Apr 2021 06:48:37 GMT
Connection: Keep-Alive
Content-Type: text/html
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了