KubeEdge 边缘计算网络

文章目录

shell 复制代码
# KubeEdge

https://iothub.org.cn/docs/kubeedge/
https://iothub.org.cn/docs/kubeedge/app/kube-network/

一、概述

1.hostNetwork

在 k8s 中,若 pod 使用主机网络 ,也就是hostNetwork=true。则该pod会使用主机的dns以及所有网络配置,默认情况下是无法使用 k8s 自带的 dns 解析服务 ,但是可以修改 DNS 策略或者修改主机上的域名解析(/etc/resolv.conf),使主机可以用 k8s 自身的 dns 服务。一般通过 DNS 策略(ClusterFirstWithHostNet)来使用 k8s DNS 内部域名解析

k8s DNS 策略如下:

  • Default:继承 Pod 所在宿主机的 DNS 设置,hostNetwork 的默认策略。
  • ClusterFirst(默认DNS策略):优先使用 kubernetes 环境的 dns 服务,将无法解析的域名转发到从宿主机继承的 dns 服务器。
  • ClusterFirstWithHostNet:和 ClusterFirst 类似,对于以 hostNetwork 模式运行的 Pod 应明确知道使用该策略。也是可以同时解析内部和外部的域名。
  • None:忽略 kubernetes 环境的 dns 配置,通过 spec.dnsConfig 自定义 DNS 配置。

一般使用主机网络就增加如下几行即可:

shell 复制代码
hostNetwork: true
dnsPolicy: "ClusterFirstWithHostNet"

『示例』:hostNetwork.yaml

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      # 使用主机网络
      hostNetwork: true
      # 该设置是使POD使用k8s的dns,dns配置在/etc/resolv.conf文件中
      # 如果不加,pod默认使用所在宿主主机使用的DNS,这样会导致容器
      # 内不能通过service name访问k8s集群中其他POD
      dnsPolicy: ClusterFirstWithHostNet
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - name: metrics
          # 如果hostNetwork: true,hostPort必须跟containerPort一样,所以hostPort一般不写,端口也是占用宿主机上的端口。
          hostPort: 80
          containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
      nodePort: 31280

2.hostPort

hostPort 和 NodePort的区别:

hostPort 只会在运行机器上开启端口, NodePort 是所有 Node 上都会开启端口。

  • hostPort 是由 portmap 这个 cni 提供 portMapping 能力,同时如果想使用这个能力,在配置文件中一定需要开启 portmap。
  • 使用 hostPort 后,会在 iptables 的 nat 链中插入相应的规则,而且这些规则是在 KUBE-SERVICES 规则之前插入的,也就是说会优先匹配 hostPort 的规则,我们常用的 NodePort 规则其实是在 KUBE-SERVICES 之中,也排在其后。
  • hostport 可以通过 iptables 命令查看到, 但是无法在 ipvsadm 中查看到。
  • 使用 lsof/netstat 也查看不到这个端口,这是因为 hostport 是通过 iptables 对请求中的目的端口进行转发的,并不是在主机上通过端口监听。
  • 在生产环境中不建议使用 hostPort。

3.Pod主机网络选择

1.使用主机网络 - hostNetwork

  • 设置 hostNetwork: true

  • hostPort必须跟containerPort一样,所以hostPort一般不写,端口也是占用宿主机上的端口

  • Edge节点只能运行一个Pod,否则端口冲突

2.使用hostPort

  • 可以改变默认端口,或开放部分端口
  • 如果hostNetwork: true,hostPort必须跟containerPort一样,所以hostPort一般不写

二、EdgeCore

1.hostNetwork

shell 复制代码
    spec:
      # 使用主机网络
      hostNetwork: true
      # 该设置是使POD使用k8s的dns,dns配置在/etc/resolv.conf文件中
      # 如果不加,pod默认使用所在宿主主机使用的DNS,这样会导致容器
      # 内不能通过service name访问k8s集群中其他POD
      dnsPolicy: ClusterFirstWithHostNet
shell 复制代码
[root@k8s-master kubeedge]# vim nginx.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeName: edge-2    #调度到指定机器
      hostNetwork: true   # 使用主机网络
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          hostPort: 8080
shell 复制代码
[root@k8s-master kubeedge]# kubectl apply -f nginx.yaml 
deployment.apps/nginx-deployment created


[root@k8s-master kubeedge]# kubectl get pod -owide
NAME                                READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-deployment-6bd49f646f-njpb2   1/1     Running   0          28s   172.17.0.3   edge-2   <none>           <none>
shell 复制代码
# 访问
curl 192.168.202.212
curl 192.168.202.212:80

[root@k8s-master kubeedge]# curl 192.168.202.212: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

2.hostPort

shell 复制代码
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - name: metrics
          # 如果hostNetwork: true,hostPort必须跟containerPort一样,所以hostPort一般不写,端口也是占用宿主机上的端口。
          hostPort: 80
          containerPort: 80
shell 复制代码
[root@k8s-master kubeedge]# vim nginx-hostport.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeName: edge-2  #调度到指定机器
      #hostNetwork: true
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          hostPort: 8080  #主机端口
shell 复制代码
[root@k8s-master kubeedge]# kubectl apply -f nginx-hostport.yaml 
deployment.apps/nginx-deployment created


[root@k8s-master kubeedge]# kubectl get pod -owide
NAME                                READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx-deployment-6bd49f646f-njpb2   1/1     Running   0          28s   172.17.0.3   edge-2   <none>           <none>
shell 复制代码
# 访问
curl 192.168.202.212
curl 192.168.202.212:8080


[root@k8s-master kubeedge]# curl 192.168.202.212
curl: (7) Failed connect to 192.168.202.212:80; Connection refused


[root@k8s-master kubeedge]# curl 192.168.202.212:8080
<!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>
shell 复制代码
# KubeEdge

https://iothub.org.cn/docs/kubeedge/
https://iothub.org.cn/docs/kubeedge/app/kube-network/
相关推荐
seacracker5 分钟前
不重造 S3 轮子:PowerFS 如何把 RustFS 变成自己的 S3 服务面
人工智能·kv存储·rustfs·powerfs·s3对象存储
IT_陈寒5 分钟前
SpringBoot实战技巧总结
前端·人工智能·后端
逐流人18 分钟前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops
叼烟扛炮27 分钟前
Linux 学习笔记(六十一):网络编程毕业设计——Reactor 反应堆模式
linux·网络·笔记·学习·课程设计
lucas_AI29 分钟前
Agent 基准也会烂:Terminal-Bench 三成任务有缺陷,修复后分数集体上涨 10 个点
人工智能·agent
AI源码30 分钟前
基于深度学习的日常服饰分类与推荐系统设计
人工智能·深度学习·分类
2401_8685347830 分钟前
【网络安全
网络·python
xyzzklk32 分钟前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
叼烟扛炮2 小时前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
johnsong9 小时前
AI前沿日报 · 2026-10-31 | 安全失守——当AI工具被下毒、当云端门户洞开
人工智能·安全