在CentOS上部署Kubernetes(k8s)集群时,跨节点通信是一个关键的功能。以下是实现跨节点通信的步骤和注意事项:
首先,确保你已经在多个节点上成功安装了Kubernetes集群。你可以使用kubeadm来初始化和管理集群。
# 在主节点上执行
kubeadm init --pod-network-cidr=10.244.0.0/16
# 在工作节点上执行
kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
为了实现Pod之间的通信,你需要部署一个网络插件。常用的网络插件有Calico、Flannel和Weave等。
Calico是一个高性能的网络插件,支持多种网络模式。
# 安装Calico
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml
# 检查Calico Pod状态
kubectl get pods -n kube-system | grep calico
Flannel是一个简单的覆盖网络解决方案。
# 安装Flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 检查Flannel Pod状态
kubectl get pods -n kube-system | grep flannel
为了增强安全性,你可以配置网络策略来控制Pod之间的通信。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-same-namespace
spec:
  podSelector: {}
  ingress:
  - from:
    - podSelector: {}
  egress:
  - to:
    - podSelector: {}
确保Pod可以在不同节点之间通信。
kubectl run test-pod --image=nginx --port=80
kubectl get pod test-pod -o wide
kubectl exec -it <another-node-pod> -- curl http://<test-pod-ip>:80
如果你需要通过服务或Ingress暴露应用,确保配置正确。
apiVersion: v1
kind: Service
metadata:
  name: test-service
spec:
  selector:
    app: test-pod
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
spec:
  rules:
  - host: test.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: test-service
            port:
              number: 80
通过以上步骤,你应该能够在CentOS上部署的Kubernetes集群中实现跨节点通信。