Ingress: 翻译, 入口

为什么需要 Ingress

image.png

可以实现的功能:

  • 基于 cookie 的会话亲和性 (session affinity)

Ingress 控制器是必不可少的

注意:

  • 只有 Ingress 控制器在集群中运行, Ingress 资源才能正常运行 (不太理解是什么意思)
  • 结合下文看, 控制器可能是指 http 代理的实现 (nginx)

在 minikube 上启动 Ingress 的扩展功能:

  • 利用附加组件

列出组件:

  1. $ minikube addons list
  2. |-----------------------------|----------|--------------|
  3. | ADDON NAME | PROFILE | STATUS |
  4. |-----------------------------|----------|--------------|
  5. | ambassador | minikube | disabled |
  6. | auto-pause | minikube | disabled |
  7. | csi-hostpath-driver | minikube | disabled |
  8. | dashboard | minikube | enabled |
  9. | default-storageclass | minikube | enabled |
  10. | efk | minikube | disabled |
  11. | freshpod | minikube | disabled |
  12. | gcp-auth | minikube | disabled |
  13. | gvisor | minikube | disabled |
  14. | helm-tiller | minikube | disabled |
  15. | ingress | minikube | disabled | ---- 这里
  16. | ingress-dns | minikube | disabled |
  17. | istio | minikube | disabled |
  18. | istio-provisioner | minikube | disabled |
  19. | kubevirt | minikube | disabled |
  20. | logviewer | minikube | disabled |
  21. | metallb | minikube | disabled |
  22. | metrics-server | minikube | enabled |
  23. | nvidia-driver-installer | minikube | disabled |
  24. | nvidia-gpu-device-plugin | minikube | disabled |
  25. | olm | minikube | disabled |
  26. | pod-security-policy | minikube | disabled |
  27. | registry | minikube | disabled |
  28. | registry-aliases | minikube | disabled |
  29. | registry-creds | minikube | disabled |
  30. | storage-provisioner | minikube | enabled |
  31. | storage-provisioner-gluster | minikube | disabled |
  32. | volumesnapshots | minikube | disabled |
  33. |-----------------------------|----------|--------------|

启动 ingress 组件:

  • 在另外一个 pod 上运行一个 Ingress 控制器
  1. $ minikube addons enable ingress

我的执行失败, 超时.

看 Ingress 在哪里:

  1. $ kubectl get po --all-namespaces
  2. NAMESPACE NAME READY STATUS RESTARTS AGE
  3. default hello-rs-cg852 1/1 Running 0 4h15m
  4. default hello-rs-vhb7g 1/1 Running 0 4h15m
  5. default hello-rs-x5r75 1/1 Running 0 4h15m
  6. kube-system coredns-74ff55c5b-hxsrg 1/1 Running 3 3d
  7. kube-system etcd-minikube 1/1 Running 3 3d
  8. kube-system ingress-nginx-admission-create-g7vtb 0/1 Completed 0 100s
  9. kube-system ingress-nginx-admission-patch-65rxm 0/1 Completed 0 100s
  10. kube-system ingress-nginx-controller-65cf89dc4f-7mnlz 0/1 ImagePullBackOff 0 100s
  11. kube-system kube-apiserver-minikube 1/1 Running 3 3d
  12. kube-system kube-controller-manager-minikube 1/1 Running 3 3d
  13. kube-system kube-proxy-zctp7 1/1 Running 3 3d
  14. kube-system kube-scheduler-minikube 1/1 Running 3 3d
  15. kube-system metrics-server-56c4f8c9d6-mxtqq 0/1 ImagePullBackOff 0 2d2h
  16. kube-system storage-provisioner 1/1 Running 6 3d
  17. kubernetes-dashboard dashboard-metrics-scraper-f6647bd8c-wcx6p 1/1 Running 2 2d3h
  18. kubernetes-dashboard kubernetes-dashboard-968bcb79-ltzkc 1/1 Running 3 2d3h

5.4.1 创建 Ingress 资源

image.png
image.png

5.4.2 通过 Ingress 访问服务

获取 Ingress 的 IP 地址

列出 Ingress:

image.png

确保在 Ingress 中配置的 Host 指向 Ingress 的 IP 地址

需要配置 DNS.

通过 Ingress 访问 pod

了解 Ingress 的工作原理

image.png

Ingress 通过 Endpoints 查看可用 pod 的地址并进行选择.

5.4.3 通过相同的 Ingress 暴露多个服务

将不同的服务映射到相同主机的不同路径

image.png

注意 serviceName 的值不同.

将不同的服务映射到不同的主机上

image.png

别忘记配置 DNS.

5.4.4 配置 Ingress 处理 TLS 传输

为 Ingress 创建 TLS 认证

证书和私钥存储在 Secret 资源中.

创建私钥和证书:

image.png

创建 Secret:

  • tls-secret: secret 名称

image.png

更新 Ingress 配置:

  • kubectl apply -f kubia-ingress-tls.yaml

image.png