网络
使用 Cilium 替换 Calico
· ☕ 1 分钟
1. 系统要求 Kubernetes, >= 1.16.0-0 Helm, >= 3.0 Linux 内核 >= 4.9.17 CentOS 7 升级内核过程,可以参考 Calico 下如何切换数据面到 eBPF 。 2. 卸载 Calico 删除集群资源 1 2 3 4 5 6 kubectl -n kube-system delete ds calico-node kubectl -n kube-system delete deploy calico-kube-controllers kubectl -n kube-system delete sa calico-node kubectl -n kube-system delete sa calico-kube-controllers kubectl -n kube-system delete cm calico-config kubectl -n kube-system delete secret calico-config 1 kubectl get crd | grep calico | awk '{print $1}' | xargs

Calico 下如何切换数据面到 eBPF
· ☕ 1 分钟
1. 环境准备 1.1 Calico eBPF 要求 系统要求 Ubuntu 18.04.4+ Red Hat v8.2 Linux kernel v5.3+ 如果 Calico 没有检测到兼容的内核,将会回退到标准模式。 每个节点的 /sys/fs/bpf 都需要挂载有 BPF 文件系统 Calico 版本不低于 3.13 1.2 升级内核 这里使用的是 CentOS 7 操作系统: 1 2 3 uname -rv 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 内核版本不满足要求,因此需要升级内核

在 Kubernetes 中如何给 NodePort 配置 NetworkPolicy
· ☕ 5 分钟
1. 需求背景 如上图,业务方需要隔离 namespae 的服务,禁止 bar 空间的负载访问,而允许用户从 Load Balancer (LB) 通过 NodePort 访问服务。可以很容易地写出一个网络策略: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 apiVersion:networking.k8s.io/v1kind:NetworkPolicymetadata:name:test-network-policynamespace:foospec:podSelector:matchLabels:{}policyTypes:- Ingressingress:- from:- ipBlock:cidr:10.2.3.4/32- namespaceSelector:matchExpressions:- key:regionoperator:NotInvalues:- bar 然而从 LB 访问的流量被完全禁止,不符合预期。在技术社区检索得

Kubernetes网络权威指南:基础、原理与实践
· ☕ 1 分钟
作者: 杜军 出版社: 电子工业出版社 出版年: 2019-10 ISBN: 9787121373398 Notes: 网络是 Kubernetes 中不易掌握的一个难点。网络故障会直接影响现有的负载,通常是十分紧急的问题。而网络相关的知识相较于应用开发更底层,很多的细节,需要长期的积累。 书中相关的要点之前陆续都有所接触,通过阅读这

Django 大文件传输
· ☕ 2 分钟
1. 直接返回文件 如果静态文件在工程根目录的 media/test.zip,需要先将文件读入内存,再进行传输。代码如下: settings.py 配置 1 2 PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/') yourapp/views.py 1 2 3 4 5 6 7 8 9 10 11 12 from django.conf import settings from django.http import HttpResponse from django.core.files.storage import FileSystemStorage def download_file_direct_from_file(request): file_system = FileSystemStorage(settings.MEDIA_ROOT) file_name = 'test.zip' with file_system.open(file_name) as f: response = HttpResponse(f) response['Content-Type'] = 'application/%s' % file_name.split('.')[-1] response['Content-Disposition'] = 'attachment; filename="%s"'% file_name return