kubernetes ingress控制器澄清[关闭]

问题描述 投票:2回答:1

我对Kubernetes有点新意,并且正在翻看“Ingress”。在阅读了k8文档和谷歌搜索后,我总结了以下内容。有人可以确认/纠正我的理解:

要了解Ingress,我将其分为两部分:

云基础架构:

在这里,有一个内置的入口控制器,它在主节点中运行(但是当运行kubectl get pods -n all时我们看不到它)。要进行配置,首先要创建部署Pod并通过服务公开它们(服务类型= NodePort必须)。此外,请确保创建default-backend-service。然后创建入口规则如下:

kind: Ingress
metadata:
  name: app-ingress
spec:
  backend:
   serviceName: default-svc
   servicePort: 80
  rules:
  - host: api.foo.com
    http:
      paths:
      - path: /v1/
        backend:
          serviceName: api-svc-v1
          servicePort: 80
      - path: /v2/
        backend:
          serviceName: api-svc-v2
          servicePort: 80

将入口规则应用于API服务器后,入口控制器将侦听API并更新/etc/nginx.conf。此外,几分钟后,nginx控制器创建一个带IP的外部负载均衡器(比方说LB_IP)

现在要测试:从你的浏览器输入http://api.foo.com/(or http://)这将重定向到默认服务和http://api.foo.com/v1(or http:/// v1)这将重定向它服务api-svc-v1

题:

  1. 如何查看/ etc / nginx文件,因为入口控制器窗格不可见。
  2. 在此期间,应用入口规则并创建外部LB_IP,所有注册商的所有DNS服务器都使用DNS条目“api.foo.com”进行更新

使用kubeadm部署内部kubernetes:

在这种情况下,没有外部入口控制器,您需要手动安装它。要进行配置,首先要创建部署pod并通过服务公开它们(确保服务Type = NodePort)。此外,请确保使用以下yaml文件创建default-backend-service.Create Ingress控制器:

spec: 
  containers: 
    - 
      args: 
        - /nginx-ingress-controller
        - "--default-backend-service=\\$(POD_NAMESPACE)/default-backend"
      image: "gcr.io/google_containers/nginx-ingress-controller:0.8.3"
      imagePullPolicy: Always
      livenessProbe: 
        httpGet: 
          path: /healthz
          port: 10254
          scheme: HTTP
        initialDelaySeconds: 10
        timeoutSeconds: 5
      name: nginx-ingress-controller
      readinessProbe: 
        httpGet: 
          path: /healthz
          port: 10254
          scheme: HTTP

我们可以看到使用“kubectl get pods”在node3中运行的入口控制器并登录到这个pod,我们可以看到/etc/nginx/nginx.conf

现在创建入口规则如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/rewrite-target: /
  name: app-ingress
spec:
  rules:
  - host: testabc.com
    http:
      paths:
      - backend:
          serviceName: appsvc1
          servicePort: 80
        path: /app1
      - backend:
          serviceName: appsvc2
          servicePort: 80
        path: /app2

将入口规则应用于API服务器后,入口控制器将侦听API并更新/etc/nginx.conf。但请注意,没有创建Load Balancer。相反,当您执行“kubectl get ingress”时,您将获得Host = testabc.com和IP = 127.0.0.1。现在要在外面公开这个入口控制器,我需要创建一个type = NodePort或type = Loadbalancer的服务

kind: Service
metadata:    
  name: nginx-ingress    
spec:
  type: NodePort
  ports:
    - port: 80
      nodePort: 33200
      name: http
    selector:
    app: nginx-ingress-lb

在此之后,我们将获得一个外部IP(如果type = Loadbalancer)

现在要测试:从你的浏览器输入http://testabc.com/(or http://)这将重定向到默认服务和http://testabc.com/v1(or http:/// v1)这将重定向它服务api-svc-v1

题:

3.如果入口控制器pod在node3中运行,它如何监听在node1中运行的入口api

nginx kubernetes
1个回答
0
投票

Q.1如何查看/ etc / nginx文件,因为入口控制器窗格不可见?

答:每当您通过Helm安装Nginx Ingress时,它会为该Ingress创建一个完整的部署。此部署位于Kube-System命名空间中。绑定到此部署的所有pod也驻留在Kube-System命名空间中。因此,如果您想要附加到此pod的容器,您需要进入该命名空间并附加到它。然后,您将能够看到该命名空间中的Pod。 Here You can see the Namespace is Kube-System & the 1st deployment in the list is for Nginx Ingress.

Q.3如果入口控制器pod在node3中运行,它如何监听node1中运行的入口api?

答案:pod和节点之间的整个通信使用Kubernetes中的服务进行。服务使用NodePort以及内部端点和外部端点将pod暴露给每个节点。然后,通过标签将此服务附加到部署(在这种情况下为入口部署),并通过集群进行通信。我希望您知道如何将服务附加到部署。因此,即使控制器pod在node3上运行,服务也知道这一点并将传入流量传输到pod。 Endpoints exposed to entire cluster, right above the curser.

© www.soinside.com 2019 - 2024. All rights reserved.