Kubernetes通过初学者的眼光进入

什么是入口?


入口是Coubertene中资源的基本类型。 如果仅在kubernetis中声明Ingress类型的对象,则将不会发生任何事情。


为了使该资源在Kubernetis集群中开始工作,必须安装一个Ingress Controller,该控制器将根据Ingress对象配置反向代理。


Ingress Controller由2个组件组成-反向代理和与Kubernetes API服务器通信的控制器。 反向代理在设置中指定的端口上侦听传入流量(通常在默认设置中仅指定端口80)。 控制器可以是单独的守护程序(如nginx),也可以内置于代理中(如traefik)。


默认情况下,并非所有云kubernetes提供程序都预安装了Ingress Controller。


控制器可以作为DaemonSet或作为Deployment运行。 最好将DaemonSet用作唯一的Ingress Controller,以便反向代理侦听worker的所有IP地址。 如果Ingress控制器前面有一个平衡器(来自kubernetis提供程序(GKE,AKS),MetalLB(如果是高级服务器或常规haproxy / nginx)安装在服务器上(需要手动配置)),则部署是完美的。 通过此安装,可以安装多个Ingress Controller。


入站流量如何到达入口控制器


在所有情况下,Ingress Controller中的反向代理都会侦听等待HTTP / HTTPS连接的端口。


这些端口上的流量可以通过三种方式访问​​:


  • NodePort(在30000-32767范围内的随机端口上)
  • HostPort(可以挂在端口80、443上)
  • 主机网络-Pod将在公共网络接口上设置其端口(即所有容器端口都将打开)

节点端口


在没有LoadBalancer的NodePort上安装Ingress Controller几乎没有意义,因为URL将包含NodePort http://domain.example.org:32200/中指定的端口。


对于此选项,最好使用“部署”。 这将使扩展负责传入流量的Pod的数量,为它们注册nodeAffinity以及运行多个入口控制器(例如,用于生产和登台)变得更加容易。


主机端口


使用HostPort时,端口是从在同一Pod下运行的主机转发的。 不需要LoadBalancer进行输入,但是要使站点在DNS中工作,您需要指示域地址在所有节点上。


3个工作程序的DNS配置示例:


ingress.example.org A 10.0.0.1 ingress.example.org A 10.0.0.2 ingress.example.org A 10.0.0.3 www.example.org CNAME ingress.example.org 

对于此安装,最好使用DaemonSet,因为 它允许您在主机上运行不超过一个Pod。 可以部署,但由于没有意义 必须注册关联性,这样2个Pod不会分配给一台主机,否则端口上将发生冲突。


traefik的配置示例
 kind: DaemonSet apiVersion: extensions/v1beta1 metadata: name: traefik-ingress-controller namespace: traefik labels: k8s-app: traefik-ingress-lb spec: template: metadata: labels: k8s-app: traefik-ingress-lb name: traefik-ingress-lb namespace: traefik spec: serviceAccountName: traefik-ingress-controller terminationGracePeriodSeconds: 60 containers: - image: traefik:1.7.6 name: traefik-ingress-lb ports: - name: http containerPort: 80 hostPort: 80 - name: https containerPort: 443 hostPort: 443 - name: admin containerPort: 8080 hostPort: 8080 securityContext: capabilities: drop: - ALL add: - NET_BIND_SERVICE args: - --api - --kubernetes - --logLevel=DEBUG - --entrypoints=Name:https Address::443 TLS - --entrypoints=Name:http Address::80 - --defaultentrypoints=http 

主机网络


在与主机共享的网络上运行Ingress Controller时,不需要端口转发,但是在这种情况下,可以从Internet访问Pod中打开的所有端口。 最好使用DaemonSet来运行。 原因与HostPort相同-避免端口冲突。


选择什么


输入中是否有LoadBalancer-NodePort,否则-HostPort + DNS Round Robin。 对于实验,您可以尝试使用主机网络,但这并不安全。

Source: https://habr.com/ru/post/zh-CN434524/


All Articles