在实验之前,我们都知道,lable是k8s中内部找寻各个资源的依据,比如deployment需要跟那个pod资源进行绑定,通过lable。service资源如何跟pod资源进行绑定,通过lable。service资源如何跟service资源进行绑定,通过lable。
总结:
vi deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dp # (1)定义此Deployment资源的名字是nginx-dp,在 kubectl get deploy 中的 name 显示的名字,包括kubectl get pod 中
的name也是显示的此名字,这里有疑问,为什么不显示如下spec.template.spec.containers中的name: nginx,因为你是定义在deployment资源下
namespace: default # 在那个命名空间下,定义的资源都在此资源下,否则无法找到其他资源
labels: # (2)定义此Deployment资源的lable,以便namespace: default下的其他的资源找lables是app: nginx-lable的delpoynebt资源
app: nginx-lable # lables的名字app: nginx-lable
spec:
selector: # (3)此位置是选择标签,意思是此Deployment资源跟那个pod资源进行绑定
matchLabels:
app: nginx-1.7.9 # 此位置必须填写的是pod资源的label,也就是(4)
replicas: 1
----------------------
template: # 元数据,开始定义pod
metadata:
labels: # (4)定义pod资源的labels
app: nginx-1.7.9
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
总结:
(1) 是kubectl get deploy 包括 kubectl get pod 中名字
(2) 定义的此Deployment资源的lable
(3) 选择标签,此Deployment资源跟那个pod资源进行绑定,写pod资源的label,也就是(4)
(4) 定义pod资源的labels
[root@hdss7-21 ~]# kubectl get deployment -owide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-dp 1/1 1 1 10m nginx nginx:1.7.9 app=nginx-1.7.9
[root@hdss7-21 ~]# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dp-7cbfbcdc75-rvq2s 1/1 Running 0 10m 172.7.21.4 hdss7-21.host.com <none> <none>
[root@hdss7-21 ~]# curl 172.7.21.4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@hdss7-21 ~]#
vi svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc # (5)定义此Service资源的的名字是啥
namespace: default # 定义此service资源所在的名称空间,必须跟dedployment资源、pod资源在同一个名称空间下
labels: # 定义此servcice资源的lables,以便namespace: default下的其他的资源找lables是app: nodeport-lable的
app: nginx-svc-label
spec:
selector: # (6)标签选择器,选择要跟那个pod资源进行绑定,是pod资源label名称
app: nginx-1.7.9
ports:
- protocol: TCP
port: 80
targetPort: 80
总结:
(6) 一定要跟pod资源的label相同,也就是(4),而不是(2),deployment资源,因为访问service资源,代理的是后端的pod。
[root@hdss7-21 ~]# kubectl get svc -owide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 192.168.0.1 <none> 443/TCP 115d <none>
nginx-svc ClusterIP 192.168.58.8 <none> 80/TCP 8m6s app=nginx-1.7.9
[root@hdss7-11 ~]# vi /var/named/od.com.zone
$ORIGIN od.com.
$TTL 600 ; 10 minutes
@ IN SOA dns.od.com. dnsadmin.od.com. (
2020010501 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS dns.od.com.
$TTL 60 ; 1 minute
dns A 10.4.7.11
nginx A 10.4.7.10
[root@hdss7-11 ~]# systemctl restart named
[root@hdss7-11 ~]# dig -t A nginx.od.com +short @10.4.7.11
10.4.7.10
vi ingress.yaml
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: nginx-ingress
namespace: default
labels:
app: nginx-ingress-label
spec:
rules:
- host: nginx.od.com
http:
paths:
- path: /
backend:
serviceName: nginx-svc # 选择Service资源的的名字
servicePort: 80
[root@hdss7-21 ~]# curl nginx.od.com
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>