kubernetes将从服务传出的http流量重定向到localhost:port

时间:2018-05-23 06:46:59

标签: docker kubernetes devops google-kubernetes-engine

我有两个容器中的图表:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: catalog
  labels:
    app: catalog
    chart: catalog-0.1.0
    heritage: Tiller
spec:
  replicas: 1
  selector:
    matchLabels:
      app: catalog
  template:
    metadata:
      labels:
        app: catalog
    spec:
      containers:
        - name: catalog
          image: catalog:v1
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
        - name: myproxy
          image: myproxy:v1
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 8008
              protocol: TCP
          env:
            - name: PROXY_PORT
              value: '8080'
---
apiVersion: v1
kind: Service
metadata:
  name: catalog
  labels:
    app: catalog
    chart: catalog-0.1.0
    heritage: Tiller
spec:
  type: NodePort
  ports:
    - port: 8008
      targetPort: http
      protocol: TCP
      name: http
  selector:
    app: catalog

我需要通过localhost将所有出站流量从目录容器重定向到myproxy容器。

已经在容器中确定目录是否可以发送请求,记录它们等等。

请提示是否可以使用kubernetes实现它。

感谢。

更新

问题是我无法更改catalg容器中的代码并将查询发送到localhost

容器也没有iptables来做这样的事情

containers:
    - name: catalog
      image: catalog:v1
      imagePullPolicy: IfNotPresent
      command:
        - 'iptables -t nat -A OUTPUT -p tcp --dport 8080 -j DNAT --to-destination 127.0.0.1:8008'
      ports:
        - name: http
          containerPort: 8080
          protocol: TCP

理想情况下使用kubernetes

2 个答案:

答案 0 :(得分:1)

如果目录应用程序尊重http_proxy环境变量,那么它很容易。只需将一个环境变量添加到目录容器中。

    - name: catalog
      image: catalog:v1
      imagePullPolicy: IfNotPresent
      ports:
        - name: http
          containerPort: 8080
          protocol: TCP
      env:
      - name: HTTP_PROXY
        value: localhost:8008

答案 1 :(得分:1)

对于您的更新,如果您需要操作iptables,则可以添加另一个initContainer,例如:

  initContainers:
  - image: centos
    imagePullPolicy: Always
    name: run-iptables
    securityContext:
      privileged: true
    command:
    - "sh"
    - "-c"
    - 'yum -y install iptables; iptables -t nat -A OUTPUT -p tcp --dport 8080 -j DNAT --to-destination 127.0.0.1:8008'

由于pod中的所有容器共享相同的网络命名空间,因此它也会影响目录容器。