Это 11-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов
Список конфигурации восьми сервисов
Сервис предоставляет фиксированную конечную точку доступа для кластера POD, управляемого контроллером POD.Работа Сервиса также зависит от аксессуара в K8s, которым является CoreDNS, который обеспечивает разрешение доменного имени для адреса Сервиса.
8.1 Сервисный режим работы
- пользовательское пространство: до 1.1
- iptables: до 1.10
- ipvs: после 1.11
8.2 Тип услуги
тип | эффект |
---|---|
ClusterIP | Значение по умолчанию назначает адрес сервисной сети, который используется только для внутрикластерной связи. |
NodePort | Если вам нужен доступ вне кластера, вы можете использовать этот тип |
ExternalName | Внедрение сервисов из-за пределов кластера в кластер для удобства использования внутри кластера. |
LoadBalancer | K8S работает в облачной среде и вызывает облачную среду для создания балансировщика нагрузки. |
8.3 Ресурсные записи
SVC_NAME.NS_NAME.DOMAIN.LTD
Например: redis.default.svc.cluster.local.
8.4 Список услуг
- Состав списка
apiVersion <string> # api 版本号,v1
kind <string> # 资源类别,标记创建什么类型的资源
metadata <Object> # POD 元数据
spec <Object> # 元数据
8.5 Спецификация service.spec
- clusterIP: укажите, какой IP-адрес службы находится в сети службы, по умолчанию используется динамическое выделение.
- type: тип службы, доступный: ExternalName, ClusterIP, NodePort и LoadBalancer
8.6 Службы типа ClusterIP
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: default
spec:
selector:
app: redis
role: logstor
type: ClusterIP
clusterIP: 10.96.0.100
ports:
- port: 6379 # service 端口
targetPort: 6379 # pod 监听的端口
protocol: TCP
8.7 Сервис типа NodePort
NodePort — это nodePort, который открыт для сетевого пространства имен узла в типе ClusterIP, поэтому пользователи могут получить доступ к кластеру из-за пределов кластера, поэтому процесс запроса пользователя выглядит следующим образом: Client -> NodeIP:NodePort -> ClusterIP: ServicePort -> PodIP :КонтейнерПорт.
Можно понять, что NodePort расширяет функцию ClusterIP, позволяя клиентам получать доступ к любому nodeIP за пределами каждого кластера для доступа к clusterIP, а затем распределять нагрузку на POD по clusterIP.
- Пример контрольного списка
apiVersion: v1
kind: Service
metadata:
name: myapp
namespace: default
spec:
selector:
app: myapp
release: canary
type: NodePort
ports:
- port: 80 # service 端口
targetPort: 80 # pod 监听的端口
nodePort: 30080 # service 会在每个 node 上添加 iptables/ipvs 规则重定向这个端口的访问,所以必须保证所有 node 的这个端口没被占用
protocol: TCP
在集群外部就可以使用: http://172.16.100.102:30080 来访问这个 service 地址了
在集群内可以使用 service 的域名在 coredns 上解析得到 service 地址: dig -t A myapp.default.svc.cluster.local @10.96.0.10
8.8 Тип loadBalancerIP
В правилах iptables/ipvs каждого хоста доступ к любому узлу может достигать пода, поэтому перед этими узлами необходимо добавить балансировщик нагрузки.Если вы работаете в публичном облаке, вы можете использовать встроенный loadBalancerIP k8s для управления публичным облаком.Балансировщик нагрузки — это сервис, реализующий динамические добавления и удаления.
Можно понять, что loadBalancerIP расширяет сервис типа NodePort и балансирует нагрузку на каждый nodeip вне кластера.
8.9 Сервис без адреса кластера
Безголовая служба означает, что служба не имеет ClusterIP и не сопоставляет NodePort, а напрямую разрешает доменное имя службы в nodeIP для прямого доступа к POD на nodeIP.
- Пример контрольного списка
apiVersion: v1
kind: Service
metadata:
name: myapp-nohead
namespace: default
spec:
selector:
app: myapp-nohead
release: canary
type: ClusterIP
clusterIP: None
ports:
- port: 80 # service 端口
targetPort: 80 # pod 监听的端口
- Посмотреть адрес сервера CoreDNS
kubectl get svc -n kube-system
- Используйте адрес CoreDNS для разрешения безголового доменного имени в кластере и получения адреса пода в nodeip напрямую, а также используйте несколько записей A DNS для балансировки нагрузки.
dig -t A myapp-nohead.default.svc.cluster.local. @10.96.0.10
;; ANSWER SECTION:
myapp-nohead.default.svc.cluster.local. 5 IN A 10.244.1.75
myapp-nohead.default.svc.cluster.local. 5 IN A 10.244.2.74
8.10 тип externalName
Когда POD необходимо получить доступ к службе за пределами кластера, externalName может сопоставить службу за пределами кластера с внутренней частью кластера для доступа POD в кластере.
Это сопоставление адреса внешнего доменного имени с внутренним адресом, разрешенным coredns внутри кластера, для обеспечения внутреннего доступа к кластеру.
разное
Публикуйте свои заметки по адресу:GitHub.com/RedHat Series/Арвин…Добро пожаловать в один клик