008将外部服务纳入到k8s集群网络

案例使用python开放一个http服务,并将其纳入到k8s集群网络
  1. 先启动一个非k8s集群的服务
# 在任意节点启动一个http服务这里用python3
node1@k8s-192-168-0-17:~$ python3 -m http.server 8088 # 这里启动了8088端口
  1. 创建一个svc的yaml
# 注意我这里把两个资源的yaml写在一个文件内,在实际生产中,我们经常会这么做,方便对一个服务的所有资源进行统一管理,不同资源之间用"---"来分隔
apiVersion: v1
kind: Service
metadata:
  name: myhttp
spec:
  ports:
  - name: http-port
    port: 3306         # Service 暴露端口 3306
    protocol: TCP
  type: ClusterIP      # 仅集群内访问

---

apiVersion: discovery.k8s.io/v1
kind: EndpointSlice
metadata:
  name: myhttp-slice # 指定这个endpointslice的名称
  labels:
    kubernetes.io/service-name: myhttp  # 必须关联Service 关联了哪个svc
addressType: IPv4
ports:
- name: http-port     # 与Service端口名一致
  port: 8088           # 外部服务实际端口  这样旧相当于把8088给了 myhttp 这个svc中名称为http-port的port
  protocol: TCP
endpoints:
- addresses:
  - "192.168.0.17"     # 外部http服务IP
  conditions:
    ready: true         # 标记端点可用
  1. 验证
node1@k8s-192-168-0-17:~$ sudo kubectl get svc
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.68.0.1       <none>        443/TCP        5d2h
myhttp       ClusterIP   10.68.48.233    <none>        3306/TCP       9s
new-nginx    NodePort    10.68.194.158   <none>        81:30759/TCP   4h19m
node1@k8s-192-168-0-17:~$ curl 10.68.48.233:3306
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Directory listing for /</title>
</head>
<body>
<h1>Directory listing for /</h1>
<hr>
<ul>
<li><a href=".ansible/">.ansible/</a></li>
<li><a href=".bash_history">.bash_history</a></li>
<li><a href=".bash_logout">.bash_logout</a></li>
<li><a href=".bashrc">.bashrc</a></li>
<li><a href=".cache/">.cache/</a></li>
<li><a href=".profile">.profile</a></li>
<li><a href=".ssh/">.ssh/</a></li>
<li><a href=".sudo_as_admin_successful">.sudo_as_admin_successful</a></li>
<li><a href=".viminfo">.viminfo</a></li>
<li><a href=".Xauthority">.Xauthority</a></li>
<li><a href="httpproxy.yaml">httpproxy.yaml</a></li>
<li><a href="nginx-svc.yaml">nginx-svc.yaml</a></li>
<li><a href="nginx.yaml">nginx.yaml</a></li>
<li><a href="planet">planet</a></li>
<li><a href="ubuntu-install-k8s/">ubuntu-install-k8s/</a></li>
</ul>
<hr>
</body>
</html>
  1. 备注

这里svc使用的是ClusterIP 如果使用了NodePort

sudo kubectl patch svc myhttp -p ‘{“spec”:{“type”:“NodePort”}}’

那么同样可以 通过集群内任意ip进行访问这里就不重复演示了