В мире оркестрации контейнеров Kubernetes стал стандартом де-факто. Одним из важнейших аспектов Kubernetes является сеть, которая обеспечивает бесперебойную связь между контейнерами и сервисами. В этой статье блога мы углубимся в различные методы настройки сети в Kubernetes, приведя примеры кода для иллюстрации каждого подхода.
- Службы.
Службы Kubernetes обеспечивают связь между различными компонентами внутри кластера. Они действуют как уровень абстракции, обеспечивая стабильную конечную точку сети для набора модулей. Вот пример манифеста службы:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 8080
targetPort: 80
- Ingress:
Kubernetes Ingress позволяет предоставлять сервисы внешнему миру. Он действует как обратный прокси-сервер и обеспечивает внешний доступ к службам внутри кластера. Ниже приведен пример манифеста Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- host: mydomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
- Сетевые политики.
Сетевые политики Kubernetes обеспечивают детальный контроль над сетевым трафиком внутри кластера. Они определяют правила, разрешающие или запрещающие трафик, на основе различных критериев, таких как метки модулей, пространства имен и протоколы. Вот пример манифеста сетевой политики:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: my-network-policy
spec:
podSelector:
matchLabels:
app: my-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: database
ports:
- protocol: TCP
port: 5432
egress:
- to:
- podSelector:
matchLabels:
role: external-service
- Конфигурация DNS.
Kubernetes обеспечивает обнаружение служб на основе DNS, позволяя получать доступ к службам по их DNS-именам. По умолчанию Kubernetes назначает DNS-имя каждой службе. Вы также можете настроить собственные записи DNS для своих служб. Вот пример:
apiVersion: v1
kind: Service
metadata:
name: my-service
annotations:
external-dns.alpha.kubernetes.io/hostname: mydomain.com
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 8080
targetPort: 80
- Плагины сетевого интерфейса контейнеров (CNI):
Kubernetes поддерживает различные плагины CNI, которые отвечают за настройку сетевого подключения для контейнеров. Популярные плагины CNI включают Calico, Flannel и Weave. Вы можете установить и настроить эти плагины в соответствии с вашими сетевыми требованиями.