20、OpenShift网络管理全解析

OpenShift网络管理全解析

1. OpenShift SDN插件之ovs-networkpolicy

在OpenShift中,网络管理至关重要。之前的ovs - multitenant插件虽然能管理项目间的访问,但在更细粒度的访问控制上有所欠缺。而ovs - networkpolicy插件则能创建自定义的NetworkPolicy对象,对入站或出站流量进行限制。

1.1 迁移前准备

要从ovs - multitenant插件迁移到ovs - networkpolicy插件,需要隔离普通项目,并允许全局项目的流量。全局项目的NETID为0,可通过以下命令查看:

[root@openshift - master book]# oc get netnamespaces
NAME                NETID      EGRESS IPS
default             0          []
demo - 1            9793016    []
demo - 2            0          []
kube - public       10554334   []
kube - system       8648643    []
logging             11035285   []
management - infra  4781458    []
openshift           13291653   []
openshift - infra   12251614   []
openshift - node    38906      []

在这个例子中,只有default和demo - 2是全局项目。

1.2 脚本操作

为了简化操作,有一个辅助脚本可以创建必要的NetworkPolicy对象。操作步骤如下:
1. 下载脚本并使其可执行:

# curl -O https://raw.githubusercontent.com/openshift/origin/master/contrib/migration/migrate - network - policy.sh
# chmod +x migrate - network - policy.sh
  1. 运行脚本:
# ./migrate - network - policy.sh

运行结果示例:

NAMESPACE: default
Namespace is global: adding label legacy - netid = 0
NAMESPACE: demo - 1
networkpolicy "default - deny" created
networkpolicy "allow - from - self" created
networkpolicy "allow - from - global - namespaces" created
NAMESPACE: demo - 2
Namespace is global: adding label legacy - netid = 0

全局项目会被分配 pod.network.openshift.io/legacy - netid = 0 标签,可通过以下命令查看 allow - from - global - namespaces 网络策略的定义:

# oc export networkpolicy/allow - from - global - namespaces
apiVersion: extensions/v1beta1
kind: NetworkPolicy
metadata:
  creationTimestamp: null
  generation: 1
  name: allow - from - global - namespaces
spec:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          pod.network.openshift.io/legacy - netid: "0"
  podSelector: {}
  policyTypes:
  - Ingress
1.3 后续操作

完成上述操作后,将 networkPluginName 设置为 redhat/openshift - ovs - networkpolicy ,其余步骤与之前启用OpenShift插件的步骤相同。之后可以进行网络连通性测试:
1. 查看项目和Pod的IP地址:

# oc project
Using project "demo - 1" on server "https://openshift - master.example.com:8443".
# oc describe po/httpd | grep IP:
IP: 10.129.0.26
# oc project demo - 2
# oc describe po/httpd | grep IP:
IP: 10.129.0.27
  1. 进行ping测试:
# oc rsh httpd ping 10.129.0.26
# oc rsh httpd ping 10.129.0.27
1.4 自定义网络策略

创建新的项目demo - 3,测试网络策略限制:

# oc new - project demo - 3
# oc create - f httpd - pod.yml
# oc describe po/httpd | grep IP:
IP: 10.129.0.28
# oc rsh httpd ping 10.129.0.26

由于demo - 3是普通项目,会受到网络策略限制。可以通过以下步骤允许demo - 3访问demo - 1:
1. 给demo - 3项目打标签:

# oc project demo - 1
# oc label namespace demo - 3 name = demo - 3
  1. 创建网络策略:
# cat networkpolicy - demo - 3.yml
kind: NetworkPolicy
apiVersion: extensions/v1beta1
metadata:
  name: networkpolicy - demo - 3
spec:
  podSelector:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: demo - 3
# oc create - f networkpolicy - demo - 3.yml
  1. 再次测试访问:
# oc project demo - 3
# oc rsh httpd ping 10.129.0.26
1.5 默认网络策略配置

OpenShift可以为每个项目创建默认网络策略,操作步骤如下:
1. 创建项目模板:

# oc adm create - bootstrap - project - template - o yaml > demo - project - request.yml
  1. 修改模板以包含阻止所有入站流量的网络策略:
# cat demo - project - request.yml
apiVersion: v1
kind: Template
metadata:
  creationTimestamp: null
  name: demo - project - request
objects:
...
- apiVersion: extensions/v1beta1
  kind: NetworkPolicy
  metadata:
    name: default - deny
  spec:
    ingress:
...
  1. 创建模板:
# oc create - f demo - project - request.yml
  1. 配置OpenShift使用新模板:
# cat /etc/origin/master/master - config.yaml
projectConfig:
  defaultNodeSelector: node - role.kubernetes.io/compute = true
  projectRequestMessage: ''
  projectRequestTemplate: demo - 3/demo - project - request
  1. 重启主API服务:
# systemctl restart origin - master - api
  1. 创建新项目并测试网络策略:
# oc new - project demo - 4
# oc get networkpolicy

创建一个运行Apache的Pod并测试访问:

# cat httpd - pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: httpd
  labels:
    role: web
spec:
  containers:
  - name: httpd
    image: manageiq/httpd
    resources:
      requests:
        cpu: 400m
        memory: 128Mi
# oc create - f httpd - pod.yml
# oc describe po/httpd | grep IP:
IP: 10.129.0.29
# oc project demo - 3
# oc rsh httpd ping 10.129.0.29
2. Egress路由器

OpenShift中的路由器通常将外部客户端流量引入服务,再转发到Pod。而Egress路由器则相反,它将Pod的出站流量转发到外部网络的特定目的地。与基于HAProxy的入站路由器不同,Egress路由器基于Squid构建。

2.1 应用场景
  • 资源屏蔽 :多个应用使用不同的外部资源,运维团队可设置Egress路由器将流量重定向到同一资源。
  • 流量审计 :将特定网站的可疑请求重定向到审计系统进行分析。
2.2 类型
  • redirect :将流量重定向到特定的目标IP。
  • http - proxy :代理HTTP、HTTPS和DNS流量。

由于VirtualBox中macvlan接口的限制,无法在虚拟实验室或AWS中设置Egress路由器,最佳使用平台是裸金属。

3. 外部项目流量的静态IP

OpenShift调度器在决定Pod的放置时,会考虑Pod的均匀分布、节点亲和性和可用资源等因素。但它不考虑项目,这在大型组织中可能会导致问题。例如,处理银行账户信息的应用和其开发版本可能会在同一节点上,产生相同源IP的流量,使得企业防火墙难以区分和应用策略。

OpenShift的解决方案是为特定项目分配外部可路由的IP地址,并在企业防火墙上进行白名单设置,同时让调度对开发者透明。不过,由于VirtualBox的虚拟环境限制,难以演示此功能。

4. Egress网络策略

网络策略用于控制项目间Pod的访问,而Egress网络策略则可限制项目中所有Pod对特定外部资源的访问。例如,阻止Pod访问代码托管提供商和内容镜像,防止应用或系统库更新。与Egress路由器不同,Egress网络策略仅基于允许或拒绝进行控制,不进行流量重定向。

4.1 测试初始访问
# oc project demo - 1
# oc rsh httpd ping github.com
# oc rsh httpd ping google.com

此时没有应用Egress网络策略,对外部资源的访问不受限制。

4.2 创建自定义Egress网络策略
# cat demo - egress - policy.yml
kind: EgressNetworkPolicy
apiVersion: v1
metadata:
  name: demo - egress - policy
spec:
  egress:
  - type: Deny
    to:
      dnsName: github.com
# oc create - f demo - egress - policy.yml

再次测试访问:

# oc rsh httpd ping github.com
# oc rsh httpd ping google.com

可以看到GitHub无法访问。

4.3 修改策略
# oc edit egressnetworkpolicy/demo - egress - policy
spec:
  egress:
  - to:
      dnsName: github.com
    type: Allow
  - to:
      cidrSelector: 0.0.0.0/0
    type: Deny

再次测试:

# oc rsh httpd - egress ping github.com
# oc rsh httpd - egress ping google.com

策略按预期工作。需要注意的是,Egress规则按指定顺序评估,第一个匹配的规则生效。

5. DNS

在OpenShift中,之前通过环境变量连接Pod,但在动态环境中,这种方式有局限性。OpenShift提供了基于SkyDNS和dnsmasq的内部DNS进行服务发现。

5.1 DNS可发现资源
资源类型 域名
服务 <service>.<project>.svc.cluster.local
端点 <service>.<project>.endpoints.cluster.local
5.2 示例操作
  1. 创建项目和Pod:
# oc new - project demo - 1
# oc create - f httpd - pod.yml
# oc expose po/httpd --port 80
# oc new - project demo - 2
# oc create - f httpd - pod.yml
# oc expose po/httpd --port 80
  1. 测试访问:
# oc exec httpd - it bash
bash - 4.2$ dig httpd.demo - 1.svc.cluster.local
# oc project demo - 1
# oc exec httpd - it bash
bash - 4.2$ dig httpd.demo - 2.svc.cluster.local

还可以获取端点信息:

$ dig httpd.demo - 2.endpoints.cluster.local

OpenShift会将集群级子域名注入 /etc/resolv.conf ,因此可以使用更简短的名称访问资源。

5.3 DNS架构和查询流程

在主节点上查看监听端口:

# ss - tulpn | grep '53 '
udp UNCONN 0 0 *:8053 *:* users:(("openshift",pid = 1492,fd = 10))
tcp LISTEN 0 128 *:8053 *:* users:(("openshift",pid = 1492,fd = 13))

在节点上查看:

# ss - tulpn | grep '53 '
udp UNCONN 0 0 172.24.0.12:53 *:* users:(("dnsmasq",pid = 1202,fd = 4))
udp UNCONN 0 0 127.0.0.1:53 *:* users:(("openshift",pid = 2402,fd = 26))
udp UNCONN...

查看相关配置文件:

# oc exec httpd - it bash
bash - 4.2$ cat /etc/resolv.conf
nameserver 10.0.2.15
search demo - 1.svc.cluster.local svc.cluster.local cluster.local example.com
options ndots:5
# cat /etc/dnsmasq.d/node - dnsmasq.conf
server=/in - addr.arpa/127.0.0.1
server=/cluster.local/127.0.0.1
# cat /etc/dnsmasq.d/origin - upstream - dns.conf
server=10.0.2.2

mermaid格式流程图:

graph LR
    A[Pod] -->|DNS查询| B(dnsmasq)
    B -->|cluster.local/in - addr.arpa| C(SkyDNS)
    B -->|其他| D(上游DNS)

通过以上内容,我们详细了解了OpenShift网络管理的多个方面,包括SDN插件、Egress路由器、静态IP、Egress网络策略和DNS等,这些功能为OpenShift的网络管理提供了强大的支持。

OpenShift网络管理全解析

6. 网络管理综合应用案例

为了更好地理解OpenShift网络管理的实际应用,我们来看一个综合案例。假设我们有一个包含多个微服务的应用,分布在不同的项目中,需要对其进行网络管理以确保安全性和可用性。

6.1 项目和服务创建

首先,我们创建三个项目: app - frontend app - backend app - database ,并在每个项目中创建相应的服务和Pod。

# 创建前端项目
oc new - project app - frontend
oc create - f frontend - pod.yml
oc expose po/frontend --port 80

# 创建后端项目
oc new - project app - backend
oc create - f backend - pod.yml
oc expose po/backend --port 8080

# 创建数据库项目
oc new - project app - database
oc create - f database - pod.yml
oc expose po/database --port 3306
6.2 网络策略配置

为了确保安全性,我们需要配置网络策略。例如,只允许前端项目访问后端项目,后端项目访问数据库项目。

# 前端项目允许访问后端项目
cat <<EOF | oc create - f -
kind: NetworkPolicy
apiVersion: extensions/v1beta1
metadata:
  name: allow - frontend - to - backend
  namespace: app - frontend
spec:
  podSelector:
    matchLabels:
      role: frontend
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: app - backend
EOF

# 后端项目允许访问数据库项目
cat <<EOF | oc create - f -
kind: NetworkPolicy
apiVersion: extensions/v1beta1
metadata:
  name: allow - backend - to - database
  namespace: app - backend
spec:
  podSelector:
    matchLabels:
      role: backend
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: app - database
EOF
6.3 Egress网络策略配置

假设我们要限制后端项目只能访问特定的外部API,我们可以配置Egress网络策略。

# 后端项目只允许访问特定API
cat <<EOF | oc create - f -
kind: EgressNetworkPolicy
apiVersion: v1
metadata:
  name: restrict - backend - egress
  namespace: app - backend
spec:
  egress:
  - type: Allow
    to:
      dnsName: api.example.com
  - type: Deny
    to:
      cidrSelector: 0.0.0.0/0
EOF
6.4 DNS验证

我们可以验证各个服务之间是否可以通过DNS进行访问。

# 前端项目访问后端服务
oc project app - frontend
oc exec frontend - it bash
bash - 4.2$ curl backend.app - backend.svc.cluster.local:8080

# 后端项目访问数据库服务
oc project app - backend
oc exec backend - it bash
bash - 4.2$ mysql - h database.app - database.svc.cluster.local - P 3306
7. 网络管理的最佳实践

在OpenShift网络管理中,遵循一些最佳实践可以提高网络的安全性和性能。

7.1 最小权限原则

在配置网络策略时,应遵循最小权限原则。只允许必要的流量通过,限制不必要的访问。例如,在上述案例中,只允许前端访问后端,后端访问数据库,避免了其他不必要的流量。

7.2 定期审查和更新策略

随着应用的发展和变化,网络策略也需要定期审查和更新。例如,当有新的服务加入或旧的服务移除时,需要相应地调整网络策略。

7.3 监控和日志记录

使用监控工具和日志记录来实时监测网络流量和策略执行情况。例如,可以使用Prometheus和Grafana来监控网络流量,使用ELK Stack来记录和分析网络日志。

8. 常见问题及解决方法

在OpenShift网络管理过程中,可能会遇到一些常见问题,以下是一些解决方法。

问题描述 可能原因 解决方法
Pod之间无法通信 网络策略配置错误、DNS解析问题 检查网络策略配置,确保允许相应的流量;检查DNS配置,确保服务可以正确解析
Egress网络策略不生效 策略语法错误、网络插件问题 检查Egress网络策略的语法,确保正确配置;检查网络插件是否正常工作
服务无法通过DNS访问 DNS服务故障、配置错误 检查DNS服务的运行状态,确保其正常工作;检查 /etc/resolv.conf 和相关配置文件,确保配置正确
9. 未来发展趋势

随着云计算和容器技术的不断发展,OpenShift网络管理也将不断演进。

9.1 更智能的网络策略

未来的网络策略可能会更加智能,能够根据应用的行为和环境自动调整。例如,根据流量模式自动调整访问控制策略。

9.2 集成更多网络安全技术

OpenShift可能会集成更多的网络安全技术,如零信任架构、软件定义广域网(SD - WAN)等,以提供更高级别的网络安全保护。

9.3 更好的跨集群网络支持

随着企业采用多集群架构,OpenShift将提供更好的跨集群网络支持,确保不同集群之间的应用可以无缝通信。

10. 总结

OpenShift网络管理是一个复杂而重要的领域,涵盖了SDN插件、Egress路由器、静态IP、Egress网络策略和DNS等多个方面。通过合理配置和管理这些网络功能,可以提高应用的安全性、可用性和性能。在实际应用中,我们需要根据具体需求选择合适的网络管理方法,并遵循最佳实践来确保网络的稳定运行。同时,关注未来的发展趋势,不断学习和应用新的技术,以适应不断变化的云计算环境。

mermaid格式流程图:

graph LR
    A[创建项目和服务] --> B[配置网络策略]
    B --> C[配置Egress网络策略]
    C --> D[验证DNS访问]
    D --> E[遵循最佳实践]
    E --> F[解决常见问题]
    F --> G[关注未来趋势]

通过以上内容,我们对OpenShift网络管理有了更深入的理解,并且了解了如何在实际应用中进行网络管理和优化。希望这些信息对大家在OpenShift网络管理方面有所帮助。

内容概要:本文设计了一种基于PLC的自动洗衣机控制系统内容概要:本文设计了一种,采用三菱FX基于PLC的自动洗衣机控制系统,采用3U-32MT型PLC作为三菱FX3U核心控制器,替代传统继-32MT电器控制方式,提升了型PLC作为系统的稳定性与自动化核心控制器,替代水平。系统具备传统继电器控制方式高/低水,实现洗衣机工作位选择、柔和过程的自动化控制/标准洗衣模式切换。系统具备高、暂停加衣、低水位选择、手动脱水及和柔和、标准两种蜂鸣提示等功能洗衣模式,支持,通过GX Works2软件编写梯形图程序,实现进洗衣过程中暂停添加水、洗涤、排水衣物,并增加了手动脱水功能和、脱水等工序蜂鸣器提示的自动循环控制功能,提升了使用的,并引入MCGS组便捷性与灵活性态软件实现人机交互界面监控。控制系统通过GX。硬件设计包括 Works2软件进行主电路、PLC接梯形图编程线与关键元,完成了启动、进水器件选型,软件、正反转洗涤部分完成I/O分配、排水、脱、逻辑流程规划水等工序的逻辑及各功能模块梯设计,并实现了大形图编程。循环与小循环的嵌; 适合人群:自动化套控制流程。此外、电气工程及相关,还利用MCGS组态软件构建专业本科学生,具备PL了人机交互C基础知识和梯界面,实现对洗衣机形图编程能力的运行状态的监控与操作。整体设计涵盖了初级工程技术人员。硬件选型、; 使用场景及目标:I/O分配、电路接线、程序逻辑设计及组①掌握PLC在态监控等多个方面家电自动化控制中的应用方法;②学习,体现了PLC在工业自动化控制中的高效自动洗衣机控制系统的性与可靠性。;软硬件设计流程 适合人群:电气;③实践工程、自动化及相关MCGS组态软件与PLC的专业的本科生、初级通信与联调工程技术人员以及从事;④完成PLC控制系统开发毕业设计或工业的学习者;具备控制类项目开发参考一定PLC基础知识。; 阅读和梯形图建议:建议结合三菱编程能力的人员GX Works2仿真更为适宜。; 使用场景及目标:①应用于环境与MCGS组态平台进行程序高校毕业设计或调试与运行验证课程项目,帮助学生掌握PLC控制系统的设计,重点关注I/O分配逻辑、梯形图与实现方法;②为工业自动化领域互锁机制及循环控制结构的设计中类似家电控制系统的开发提供参考方案;③思路,深入理解PL通过实际案例理解C在实际工程项目PLC在电机中的应用过程。控制、时间循环、互锁保护、手动干预等方面的应用逻辑。; 阅读建议:建议结合三菱GX Works2编程软件和MCGS组态软件同步实践,重点理解梯形图程序中各环节的时序逻辑与互锁机制,关注I/O分配与硬件接线的对应关系,并尝试在仿真环境中调试程序以加深对自动洗衣机控制流程的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值