杭州网站建设开发哪家企业做网站好
k8s-service、endpoints、pod之间是怎么进行网络互通的
- 1、service
 - 2、endpoints
 - 3、service、endpoints、pod通信图
 - 4、不通服务pod内部间访问
 
1、service
在K8S中,Service是一种抽象,定义了一组Pod的逻辑集合和访问这些Pod的策略。首先,我们需要创建一个Service,并指定该Service的selector来确定要选中的Pod。
 k8s集群也会为service分配个cidr,每个service都有对应的IP。
 查看service。
 kubectl get svc
 
[root@k8s-node2 k8s]# kubectl get svc 
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        33h
nginx        NodePort    10.102.104.249   <none>        80:30940/TCP   5h20m
 
查看指定service详情。
kubectl describe svc nginx 
 
[root@k8s-node2 k8s]# kubectl describe svc nginx 
Name:                     nginx
Namespace:                default
Labels:                   app=nginx
Annotations:              <none>
Selector:                 app=nginx
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.102.104.249
IPs:                      10.102.104.249
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30940/TCP
Endpoints:                10.244.169.129:80,10.244.36.65:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
 
2、endpoints
Endpoints是将Service与其后端Pod关联的方式。我们需要在创建Service后,自动创建与Service相关的Endpoints。
查看ep,可以发现,nginx对应的endpoints是pod的ip地址和端口。
[root@k8s-node2 k8s]# kubectl get ep
NAME         ENDPOINTS                           AGE
kubernetes   192.168.8.132:6443                  33h
nginx        10.244.169.129:80,10.244.36.65:80   5h22m
 
3、service、endpoints、pod通信图
盗用的大佬的,哈哈
 
4、不通服务pod内部间访问
比如,部署了nginx和mysql。 从nginx的pod要去访问mysql,直接可以访问mysql的service的name去访问。
演示,服务间通信,我是用busybox的pod去访问nginx。
apiVersion: v1
kind: Pod
metadata:name: busyboxlabels:purpose: demonstrate-busybox
spec:containers:- name: busyboximage: busyboxcommand:- sleep- "3600"resources:limits:memory: "128Mi"cpu: "500m"
 
kubectl apply -f busybox.yaml
 
进入busybox容器
kubectl exec -it busybox -- sh
 
通过nginx的service的name访问nginx
wget http://nginx
 
访问成功
 
 注意:不同pod服务之间可以跨命名空间去访问的,访问格式,service的name.命名空间name,nginx放到默认命名空间default里的。
wget http://nginx.default
