|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

 

 

posted on   yanqi_vip  阅读(40)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示