k8s创建service
一、创建service示例
1.1、已有的deployment
在之前已经创建了一个有两个nginx副本数的deployment,如下所示:
[root@k8s-node1 mytestyaml]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 45m
[root@k8s-node1 mytestyaml]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-85ff79dd56-42mh9 1/1 Running 0 38m 10.244.2.62 k8s-node3 <none> <none>
nginx-deployment-85ff79dd56-gx2dl 1/1 Running 0 44m 10.244.1.68 k8s-node2 <none> <none>
并且直接访问其IP地址也能够正常的访问到nginx,但是这些Pod的IP地址并不是固定的,如果这个Pod被重新部署的话,他的IP地址是跟着一起变的。如果只是为了对外提供服务,外界不应去关注这个IP地址的变化,最好是能够访问一个固定的IP。
而在k8s中,service就是专门来做这个事情的。
1.2、使用expose创建
我们可以直接expose这个deployment来实现,如下所示:
[root@k8s-node1 mytestyaml]# kubectl expose deployment nginx-deployment
service/nginx-deployment exposed
[root@k8s-node1 mytestyaml]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 28d
nginx-deployment ClusterIP 10.96.112.83 <none> 80/TCP 26s
这里已经分配给了nginx-deployment 一个 CLUSTER-IP 为 10.96.112.83 ,端口号依旧是80。
那么我们直接访问这个CLUSTER-IP和端口号就能够访问到nginx了,因为service会自动的帮我们把访问到10.96.112.83:80的请求进行负载均衡,转发到10.244.2.62:80和10.244.1.68:80上去。
无论pod被重新部署或者所扩容与否,即使是IP地址变了,我们依然是可以访问CLUSTER-IP:PORT进行访问的。
如下所示,访问10.96.112.83:80:
[root@k8s-node1 mytestyaml]# curl 10.96.112.83:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
color-scheme: light dark; }
body {
width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif