当前位置: 首页 > news >正文

模板网站建设平台美工网站设计收费

模板网站建设平台,美工网站设计收费,做模板网站推荐乐云seo,乐度网上购物网站建设方案Kubernetes 的网络模型 通过前面教程的学习,我们已经可以将容器化的应用程序在 Kubernetes 中运行起来,并且发布到 Kubernetes 内/外的网络上。 通常,Docker 使用一种 host-private 的联网方式,在此情况下,只有两个容…

Kubernetes 的网络模型

通过前面教程的学习,我们已经可以将容器化的应用程序在 Kubernetes 中运行起来,并且发布到 Kubernetes 内/外的网络上。

通常,Docker 使用一种 host-private 的联网方式,在此情况下,只有两个容器都在同一个节点(主机)上时,一个容器才可以通过网络连接另一个容器。为了使 Docker 容器可以跨节点通信,必须在宿主节点(主机)的 IP 地址上分配端口,并将该端口接收到的网络请求转发(或代理)到容器中。这意味着,用户必须非常小心地为容器分配宿主节点(主机)的端口号,或者端口号可以自动分配。

在一个集群中,多个开发者之间协调分配端口号是非常困难的。Kubernetes 认为集群中的两个 Pod 应该能够互相通信,无论他们各自在哪个节点上。每一个 Pod 都被分配自己的 “cluster-private-IP”,因此,您无需在 Pod 间建立连接,或者将容器的端口映射到宿主机的端口。因此:

  • Pod 中的任意容器可以使用 localhost 直连同 Pod 中另一个容器的端口
  • 集群中的任意 Pod 可以使用另一的 Pod 的 cluster-private-IP 直连对方的端口,(无需 NAT 映射)

在集群中部署nginx

创建文件 run-my-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:selector:matchLabels:run: my-nginxreplicas: 2template:metadata:labels:run: my-nginxspec:containers:- name: my-nginximage: nginxports:- containerPort: 80
  • 部署 Pod
kubectl apply -f ./run-my-nginx.yaml
  • 检查运行情况:
kubectl get pods -l run=my-nginx -o wide

输出结果:

NAME                        READY     STATUS    RESTARTS   AGE       IP            NODE
my-nginx-3800858182-jr4a2   1/1       Running   0          13s       10.244.3.4    kubernetes-minion-905m
my-nginx-3800858182-kna2y   1/1       Running   0          13s       10.244.2.5    kubernetes-minion-ljyd
  • 执行命令 kubectl get pods -l run=my-nginx -o yaml | grep podIP, 检查 Pod 的 IP 地址,输出结果如下:
cni.projectcalico.org/podIP: 10.244.84.185/32cni.projectcalico.org/podIPs: 10.244.84.185/32podIP: 10.244.84.185podIPs:cni.projectcalico.org/podIP: 10.244.14.61/32cni.projectcalico.org/podIPs: 10.244.14.61/32podIP: 10.244.14.61podIPs:

在集群中的任意节点上,您可以执行curl 10.244.84.185curl 10.244.14.61 获得 nginx 的响应。

  • 容器并没有使用节点上的 80 端口
  • 没有使用 NAT 规则对容器端口进行映射

这意味着,您可以

  • 在同一节点上使用 80 端口运行多个 nginx Pod
  • 在集群的任意节点/Pod 上使用 nginx Pod 的 clusterIP 访问 nginx 的 80 端口

同 Docker 一样,Kubernets 中,仍然可以将 Pod 的端口映射到宿主节点的网络地址上(使用 nodePort),但是使用 Kubernetes 的网络模型时,这类需求已经大大减少了。

创建 Service

上面的步骤中,我们已经创建了 nginx Pod,运行在集群的 IP 地址空间。您可以直接通过 Pod 的地址访问其端口,但是如果某一个 Pod 终止了该怎么办?Pod 因为故障或其他原因终止后,Deployment Controller 将创建一个新的 Pod 以替代该 Pod,但是 IP 地址将发生变化。Kubernetes Service 解决了这样的问题。

Kubernetes Service:

  • 定义了集群中一组 Pod 的逻辑集合,该集合中的 Pod 提供了相同的功能
  • 被创建后,获得一个唯一的 IP 地址(ClusterIP)。直到该 Service 被删除,此地址不会发生改变
  • Pod 可以直接连接 Service IP 地址上的端口,且发送到该 IP 地址的网络请求被自动负载均衡分发到 Service 所选取的 Pod 集合中

执行命令 kubectl expose deployment/my-nginx 可以为上面的两个 nginx Pod 创建 Service,输出结果如下所示:

service/my-nginx exposed

该命令等价于 kubectl apply -f nginx-svc.yaml,其中 nginx-svc.yaml 文件的内容如下所示:

apiVersion: v1
kind: Service
metadata:name: my-nginxlabels:run: my-nginx
spec:ports:- port: 80targetPort: 80protocol: TCPselector:run: my-nginx

该 yaml 文件将创建一个 Service:

  • 该 Service 通过 label selector 选取包含 run: my-nginx 标签的 Pod 作为后端 Pod
  • 该 Service 暴露一个端口 80(spec.ports[*].port
  • 该 Service 将 80 端口上接收到的网络请求转发到后端 Pod 的 80 (spec.ports[*].targetPort)端口上,支持负载均衡

执行命令 kubectl get svc my-nginx,输出结果如下

NAME       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
my-nginx   ClusterIP   10.100.223.157   <none>        80/TCP    75s

Service 的后端 Pod 实际上通过 Endpoints 来暴露。Kubernetes 会持续检查 Service 的 label selector spec.selector,并将符合条件的 Pod 更新到与 Service 同名(my-nginx)的 Endpoints 对象。如果 Pod 终止了,该 Pod 将被自动从 Endpoints 中移除,新建的 Pod 将自动被添加到该 Endpoint。

执行命令 kubectl describe svc my-nginx,输出结果如下,请注意 Endpoints 中的 IP 地址与上面获得的 Pod 地址相同:

Name:              my-nginx
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          run=my-nginx
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.100.223.157
IPs:               10.100.223.157
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.14.61:80,10.244.84.185:80
Session Affinity:  None
Events:            <none>

执行命令 kubectl get ep my-nginx,输出结果

NAME       ENDPOINTS                          AGE
my-nginx   10.244.14.61:80,10.244.84.185:80   8m37s

此时,您可以在集群的任意节点上执行curl 10.100.223.157:80,通过 Service 的 ClusterIP:Port 访问 nginx。

访问 Service

Kubernetes 支持两种方式发现服务:

  • 环境变量
  • DNS 参考

环境变量

针对每一个有效的 Service,kubelet 在创建 Pod 时,向 Pod 添加一组环境变量。这种做法引发了一个 Pod 和 Service 的顺序问题。例如,

  • 执行命令 kubectl exec my-nginx-df7bbf6f5-87hqg -- printenv | grep SERVICE (您的 Pod 名字可能不一样),输出结果如下
KUARD_SERVICE_PORT=80
KUBERNETES_SERVICE_PORT_HTTPS=443
KUARD_SERVICE_HOST=10.110.143.73
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443

DNS

Kubernetes 提供了一个 DNS cluster addon,可自动为 Service 分配 DNS name。

查看该 addon 在您的集群上是否可用

kubectl get services kube-dns --namespace=kube-system

输出结果:

NAME       TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
kube-dns   ClusterIP   10.96.0.10   <none>        53/UDP,53/TCP,9153/TCP   140d

可以从集群中任何 Pod 中按 Service 的名称访问该 Service。

  • 执行命令 kubectl run curl --image=radial/busyboxplus:curl -i --tty 获得 busyboxplus 容器的命令行终端,该命令输出结果
If you don't see a command prompt, try pressing enter.
[ root@curl:/ ]$
  • 然后,单击回车键,并执行命令 nslookup my-nginx,输出结果如下所示:
[ root@curl:/ ]$  nslookup my-nginx
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.localName:      my-nginx
Address 1: 10.100.223.157 my-nginx.default.svc.cluster.local
  • 执行命令 curl my-nginx:80,可获得 Nginx 的响应。
[ root@curl:/ ]$ curl my-nginx: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; }
</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>
  • 执行命令 exit 可推出该容器的命令行
  • 执行命令 kubectl delete deployment curl 可删除刚才创建的 curl 测试容器
http://www.yayakq.cn/news/374007/

相关文章:

  • 网站视频放优酷里面怎么做网站建设与域名建设
  • 制作外贸网站的公司简介东莞seo优化方案
  • 山东德州做网站青岛宣传片制作公司
  • 建设工业网站网站建设需求方案pdf
  • 网站模板 数据库如何做采集网站
  • 豪柏大厦做网站的公司企业网站排名提升软件智能优化
  • 公司网站建设方案俄罗斯军事最新消息
  • 公墓网站建设哪类网站流量大
  • 专门做图片是网站网站和域名的关系
  • 建筑工程网签备案合同seo优化排名易下拉用法
  • 中国建设银行网站太慢了中国房地产十大排名
  • 网站关键字布局手机优化助手下载
  • 怎么制作外贸网站模板博客网站开发
  • 公司网站形象国内用react做的网站
  • 抽纸网站建设摘要广告设计与制作学什么
  • 装修网站合作平台有哪些网站开发要点
  • wordpress生产app中文搜索引擎优化理解
  • 共享网站哪里建与别人相比自己网站建设优势
  • 网站建设的风险预测专业制作外贸网站
  • 上海模板网站wordpress 点击数
  • 青岛注册公司网站小红书推广引流
  • 优秀高端网站建设公司wordpress版本降级
  • 国家补贴软件网站开发政策石家庄做商城网站的公司
  • 罗湖附近公司做网站建设哪家便宜北京网站建设的关键词
  • 许昌网站设计制作设计师必备网站
  • 海南省住房和建设厅网站中山 照明 骏域网站建设
  • 百度网站流量统计泉州网站seo外包公司
  • 旅行社做网站建设网点
  • 兰州城关区建设局网站php精品源码
  • python做的网站多吗珠海做网站价格