编程技术分享平台

网站首页 > 技术教程 正文

Ingress的proxy_pass实践(ingress配置https)

xnh888 2024-10-14 19:24:45 技术教程 39 ℃ 0 评论

#Kubernetes#

#Ingress#

在Kubernetes的生态里,我们都知道Ingress是用来对外暴露服务的重要途径,通常他的用法是这样的


但如果在某些场景下,我们希望Ingress只提供一个nginx的proxy_pass能力,直接将流量路由到另外的地方,又该如何设置呢?今天我们就来看看这个场景下的几种不同配置方法:

域名下的部分访问路由到后端Pod,部分访问转发出去

比如:

domain.com/a => a-svc

domain.com/external => external.com

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/server-snippet: |
      location /external {
        proxy_pass  http://external.com;
        rewrite ^/external/(.*) /$1 break;
      }
  name: domain-svc
  namespace: default
spec:
  rules:
    - host: domain.com
      http:
        paths:
          - backend:
              serviceName: a-svc
              servicePort: 80
            path: /a

这个配置是利用nginx.ingress.kubernetes.io/server-snippet向Ingress controller自动生成的nginx配置文件中的server段注入一段location来实现我们期望的效果

针对某一个域名的访问,全部转发出去

比如:external.domain.com => external.com

我们先创建一个ExternalName类型的svc,这个svc直接指向流量的最终域名

apiVersion: v1
kind: Service
metadata:
  name: external-svc
  namespace: default
spec:
  externalName: external.com
  type: ExternalName

这样,对external-svc的访问就都转发到external.com这个域名去了,然后我们再创建Ingress将这个svc暴露出去即可

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/upstream-vhost: external.com
  name: external-ing
  namespace: default
spec:
  rules:
    - host: external.domain.com
      http:
        paths:
          - backend:
              serviceName: external-svc
              servicePort: 80
            path: /

这里要注意的是上面的annotation,如果不加的话,转发过去的request的host会是external.domain.com,很多时候服务端检测到host和绑定域名不一致就直接返回403了

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表