Заметки Kubernetes (8) — Список конфигураций сервисов

задняя часть Kubernetes
Заметки Kubernetes (8) — Список конфигураций сервисов

Это 11-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов

Список конфигурации восьми сервисов

Сервис предоставляет фиксированную конечную точку доступа для кластера POD, управляемого контроллером POD.Работа Сервиса также зависит от аксессуара в K8s, которым является CoreDNS, который обеспечивает разрешение доменного имени для адреса Сервиса.

8.1 Сервисный режим работы

  1. пользовательское пространство: до 1.1
  2. iptables: до 1.10
  3. 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

  1. clusterIP: укажите, какой IP-адрес службы находится в сети службы, по умолчанию используется динамическое выделение.
  2. 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/Арвин…Добро пожаловать в один клик