1. 首页 > Linux教程 > 正文

Linux教程FG474-Kubernetes网络方案实战

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

风哥提示:

本文档介绍Kubernetes网络方案实战案例。

Part01-网络方案选择

1.1 CNI插件对比

# CNI插件对比
[root@k8s-master ~]# cat > /root/cni-comparison.txt << 'EOF' Kubernetes CNI插件对比 ===================== 1. Calico - 特点: 高性能,支持网络策略 - 适用: 生产环境,安全要求高 - 模式: BGP,IPIP,VXLAN 2. Flannel - 特点: 简单易用,部署快速 - 适用: 开发测试环境 - 模式: VXLAN,host-gw 3. Cilium - 特点: eBPF技术,可观测性强 - 适用: 云原生环境 - 模式: eBPF 4. Weave - 特点: 简单,支持多主机 - 适用: 小型集群 - 模式: VXLAN 5. 推荐选择 - 生产环境: Calico - 开发环境: Flannel - 高级需求: Cilium EOF # 查看当前CNI [root@k8s-master ~]# kubectl get pods -n kube-system -l k8s-app=calico-node NAME READY STATUS RESTARTS AGE calico-node-abc12 1/1 Running 0 10d calico-node-def34 1/1 Running 0 10d

Part02-Calico网络配置

2.1 Calico高级配置

# 查看Calico配置
[root@k8s-master ~]# calicoctl get ippool -o yaml
apiVersion: projectcalico.org/v3
items:
– apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: default-ipv4-ippool
spec:
blockSize: 26
cidr: 10.244.0.0/16
ipipMode: Always
natOutgoing: true
nodeSelector: all()
vxlanMode: Never
kind: IPPoolList

# 创建IP池
[root@k8s-master ~]# cat > fgedu-ippool.yaml << 'EOF' apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: fgedu-pool spec: cidr: 10.245.0.0/16 ipipMode: CrossSubnet natOutgoing: true disabled: false nodeSelector: all() EOF [root@k8s-master ~]# calicoctl apply -f fgedu-ippool.yaml Successfully applied 1 'IPPool' resource(s) # 配置网络策略 [root@k8s-master ~]# cat > fgedu-network-policy.yaml << 'EOF' apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata: name: fgedu-default-deny spec: selector: all() types: - Ingress - Egress ingress: - action: Deny egress: - action: Deny EOF [root@k8s-master ~]# calicoctl apply -f fgedu-network-policy.更多视频教程www.fgedu.net.cnyaml Successfully applied 1 'GlobalNetworkPolicy' resource(s) # 允许特定流量 [root@k8s-master ~]# cat > fgedu-allow-policy.yaml << 'EOF' apiVersion: projectcalico.org/v3 kind: GlobalNetworkPolicy metadata: name: fgedu-allow-dns spec: selector: all() types: - Egress egress: - action: Allow protocol: UDP destination: ports: - 53 EOF [root@k8s-master ~]# calicoctl apply -f fgedu-allow-policy.yaml Successfully applied 1 'GlobalNetworkPolicy' resource(s)

Part03-Ingress配置

3.1 Nginx Ingress部署

# 安装Nginx Ingress Controller
[root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.r学习交流加群风哥QQ113257174bac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
deployment.apps/ingress-nginx-controller created

# 查看Ingress Controller
[root@k8s-master ~]# kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-abc12 0/1 Completed 0 2m
ingress-nginx-admission-patch-def34 0/1 Completed 0 2m
ingress-nginx-controller-abc12-xyz789 1/1 Running 0 2m

# 创建Ingress资源
[root@k8s-master ~]# cat > fgedu-ingress.yaml << 'EOF' apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: fgedu-app-ingress namespace: fgedu-prod annotations: nginx.ingress.kubernetes.io/rewrite-target: / nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/proxy-body-size: "50m" cert-manager.io/cluster-issuer: "letsencrypt-prod" spec: ingressClassName: nginx tls: - hosts: - app.fgedu.net.cn secretName: fgedu-app-tls rules: - host: app.fgedu.net.cn http: paths: - path: / pathType: Prefix backend: service: name: fgedu-app-svc port: number: 80 EOF [root@k8s-master ~]# kubectl apply -f fgedu-ingress.yaml ingress.networking.k8s.io/fgedu-app-ingress created # 查看Ingress状态 [root@k8s-master ~]# kubectl get ingress -n fgedu-prod NAME CLASS HOSTS ADDRESS PORTS AGE fgedu-app-ingress nginx app.fgedu.net.cn 192.168.1.100 80, 443 1m

Part04-服务发现与负载均衡

4.1 CoreDNS配置

# 查看CoreDNS配置
[root@k8s-master ~]# kubectl get configmap coredns -n kube-system -o yaml
apiVersion: v1
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
ttl 30
}
prometheus :9153
forward . /etc/resolv.conf {
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
kind: ConfigMap

# 添加自定义DNS记录
[root@k8s-master ~]# cat > coredns-custom.yaml << 'EOF' apiVersion: v1 kind: ConfigMap metadata: name: coredns-custom namespace: kube-system data: fgedu.server: | fgedu.net.cn:53 { errors cache 30 forward . 192.168.1.1 } EOF [root@k8s-master ~]# kubectl apply -f coredns-custom.yaml configmap/coredns-custom created # 重启CoreDNS使配置生效 [root@k8s-master ~]# kubectl rollout restart deployment coredns -n kube-system deployment.apps/coredns restarted # 配置Service负载均衡 [root@k8s-master ~]# cat > fgedu-lb-service.yaml << 'EOF' apiVersion: v1 kind: Service metadata: name: fgedu-app-lb namespace: fgedu-prod annotations: service.beta.kubernetes.io/aws-load-balancer-学习交流加群风哥微信: itpux-comtype: nlb service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true" spec: type: LoadBalancer externalTrafficPolicy: Local ports: - port: 80 targetPort: 80 nodePort: 30080 selector: app: fgedu-app EOF [root@k8s-master ~]# kubectl apply -f fgedu-lb-service.yaml service/fgedu-app-lb created # 查看Service [root@k8s-master ~]# kubectl get svc -n fgedu-prod NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE fgedu-app-lb LoadBalancer 10.96.100.100 192.168.1.200 80:30080/TCP 30s

风哥针对网络配置建议:

  • 根据场景选择合适的CNI插件
  • 配置网络策略增强安全性
  • 使用Ingress统一入口管理
  • 优化DNS解析性能
  • 配置负载均衡实现高可用

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息