Ingress

Ingress / Service

在一个 k8s cluster中,如果我们需要从外部访问集群可以使用Type为NodePort的Service对外暴露我们的服务。以下是一个依赖关系样例:
在这里插入图片描述

# 创建一个nginx-pod
controlplane ~ ➜  kubectl run nginx-pod --image=nginx --port=80 
pod/nginx-pod created

再使用以下内容,创建一个Service nginx-pod-svc.yml

Service

apiVersion: v1
kind: Service
metadata:
  name: nginx-pod-svc
spec:
  type: NodePort
  selector:
    run: nginx-pod #通过run命令生成的pod所产生的标签
  ports:
    - port: 80
      targetPort: 80
      nodePort: 30001

查看Service信息并测试

controlplane ~ ➜  kubectl describe svc nginx-pod-svc 
Name:                     nginx-pod-svc
Namespace:                default
Labels:                   <none>
Annotations:              <none>
Selector:                 run=nginx-pod
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.98.194.212
IPs:                      10.98.194.212
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  30001/TCP
Endpoints:                10.244.1.2:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
# 本地测试 curl localhost:30001 访问成功
controlplane ~ ➜  curl localhost:30001
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

但是一般我们不想记住IP地址和端口号,而是使用域名来对应用进行访问,并且可以使用https进行安全链接,我们可以使用Ingress,这样我们就可以不用暴露Service的端口到Node上,通过域名进行访问应用。以下是依赖关系样例:
在这里插入图片描述
如果只有Ingress不足以实现流量转发,还需要Ingress Controller去实现
在这里插入图片描述
它的作用是评估和处理Ingress rules/管理重定向/进入cluster的入口
Ingress Controller
如果外部拥有云平台的Load Balancer,流量路由路径就会是这样:
在这里插入图片描述

Practise

在这里插入图片描述

首先修改之前的nginx-pod-svc.yml ,不需要对外暴露端口

controlplane ~ ➜  vi nginx-pod-svc.yml 

controlplane ~ ➜  cat nginx-pod-svc.yml 
apiVersion: v1
kind: Service
metadata:
  name: nginx-pod-svc
spec:
  type: ClusterIP
  selector:
    run: nginx-pod #通过run命令生成的pod所产生的标签
  ports:
    - port: 80
      targetPort: 80

controlplane ~ ➜  kubectl replace -f nginx-pod-svc.yml 
service/nginx-pod-svc replaced

controlplane ~ ➜  kubectl describe svc nginx-pod-svc 
Name:              nginx-pod-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          run=nginx-pod
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.98.194.212
IPs:               10.98.194.212
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80
Session Affinity:  None
Events:            <none>

controlplane ~ ➜  curl localhost:30001
curl: (7) Failed to connect to localhost port 30001 after 0 ms: Connection refused

要使用Ingress,首先需要Ingress Controller
Ingress-Nginx Controller
这里使用Ingress-Nginx Controller

# 使用helm安装
helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace
# 生成一个新的namespace
controlplane ~ ➜  kubectl get ns
NAME              STATUS   AGE
default           Active   4h15m
ingress-nginx     Active   71s
kube-flannel      Active   4h15m
kube-node-lease   Active   4h15m
kube-public       Active   4h15m
kube-system       Active   4h15m
# 生成新的Pod
controlplane ~ ➜  kubectl get pod -n ingress-nginx 
NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-69bd47995d-gr55b   1/1     Running   0          72s

  

然后我们创建提供httpd服务的Pod和Service

controlplane ~ ➜  kubectl run httpd-pod --image=httpd --port=80
pod/httpd-pod created

httpd-pod-svc.yml

apiVersion: v1
kind: Service
metadata:
  name: httpd-pod-svc
spec:
  type: ClusterIP
  selector:
    run: httpd-pod #通过run命令生成的pod所产生的标签
  ports:
    - port: 80
      targetPort: 80

测试

controlplane ~ ➜  vi httpd-pod-svc.yml

controlplane ~ ➜  kubectl apply -f httpd-pod-svc.yml 
service/httpd-pod-svc created

controlplane ~ ➜  kubectl describe svc httpd-pod-svc 
Name:              httpd-pod-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          run=httpd-pod
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.98.177.252
IPs:               10.98.177.252
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.3:80
Session Affinity:  None
Events:            <none>

controlplane ~ ➜  curl 10.98.177.252
<html><body><h1>It works!</h1></body></html>

配置Ingress,通过不同的域名访问不同的服务

# 查看ingressclass
controlplane ~ ➜  kubectl get ingressclasses.networking.k8s.io 
NAME    CONTROLLER             PARAMETERS   AGE
nginx   k8s.io/ingress-nginx   <none>       19m


Ingress
创建Ingress ingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-ing
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: nginx-pod-svc.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-pod-svc
            port:
              number: 80
  - host: httpd-pod-svc.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: httpd-pod-svc
            port:
              number: 80              
              
              


  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ingress 502错误是指在访问Ingress时服务器返回的错误代码。具体表示服务器出现了一些问题,无法提供所请求的页面。 当我们在浏览器访问一个网站时,我们的请求首先会发送到服务器,服务器会进行处理并返回响应给我们的浏览器。在这个过程中,如果服务器在处理我们的请求时遇到了错误,就会返回相应的错误代码。而Ingress 502错误代码则意味着服务器在处理我们的请求时遇到了问题。 Ingress 502错误可能是由于以下几个原因引起的: 1. 服务器过载:服务器处理请求的速度没有跟上请求的速度,导致一些请求无法正常处理,从而返回502错误。 2. 后端服务器故障:服务器上的后端应用程序或数据库等出现了故障,导致服务器无法处理请求。 3. 代理服务器问题:在使用代理服务器时,代理服务器本身出现了问题,无法正常将请求转发到目标服务器。 对于用户而言,遇到Ingress 502错误时,我们建议可以尝试以下几个解决方法: 1. 刷新页面:有时候502错误是暂时的,刷新页面可能会解决问题。 2. 等待一段时间:如果是服务器过载导致的错误,可以等待一段时间后再次尝试访问。 3. 检查网络连接:检查自己的网络连接是否正常,尝试连接其他网站,以确定是否是自己的网络问题。 4. 与网站管理员联系:如果以上方法都无效,可以尝试联系网站管理员报告问题,让其能够及时处理服务器问题。 总的来说,Ingress 502错误代码表示服务器无法正常处理请求,可能是由于服务器过载或故障等原因引起的。需要用户尝试刷新页面、等待一段时间、检查网络连接或与网站管理员联系来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值