我对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
问题:
如何查看/ etc / nginx文件,因为无法看到入口控制器窗格。
在此期间,应用入口规则并创建外部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
答案 0 :(得分:0)
Q.1由于看不到入口控制器窗格,如何查看/ etc / nginx文件?
回答:每当您通过Helm安装Nginx Ingress时,它都会为该Ingress创建一个完整的Deployment。此部署位于Kube系统命名空间中。绑定到此部署的所有 pod都还驻留在Kube-System命名空间中。因此,如果要附加到此容器的容器,则需要进入该名称空间并附加到该名称空间。然后,您将能够看到该命名空间中的Pod。 Here You can see the Namespace is Kube-System & the 1st deployment in the list is for Nginx Ingress.
Q.3如果Ingress-Controller Pod在Node3中运行,它如何侦听在Node1中运行的Ingress api?
答案:整个Pod和节点之间的通信是使用Kubernetes中的服务进行的。服务使用NodePort以及内部端点和外部端点将pod暴露给每个节点。然后,此服务通过标签附加到部署(在这种情况下为inress-deployment),并且在整个集群中都可以知道以进行通信。我希望您知道如何将服务附加到部署。因此,即使控制器Pod在Node3上运行,服务也会知道这一点并将传入的流量传输到Pod。 Endpoints exposed to entire cluster, right above the curser.