0

k8s サービス アプローチではなく、VIP ベースの例であることを指摘した外部 HTTPS プロキシの使用の主題全体に従いました。しかし、私の場合、Squid は k8s サービス経由でアクセスでき、VIP アドレスではなく FQDN を使用したいと考えています。

設定削除addresses部分を変更しました:

Squid Istio サービス エントリ:

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: proxy
spec:
  hosts:
  - squid.external.svc.cluster.local
  location: MESH_EXTERNAL
  exportTo: 
  - "."
  ports:
  - number: 3128
    name: tcp
    protocol: TCP

外部 Squid パーツをexternalns でメッシュ化する:

イカポッド:

  ports:
  - containerPort: 3128
    name: http
    protocol: TCP

イカ k8s サービス:

  ports:
  - name: http
    port: 3128
    protocol: TCP
    targetPort: http

コインターナーからのカーリングsleep:

HTTPS_PROXY=http://squid.external:3128 curl https://en.wikipedia.org/wiki/Main_Page

スリープサイドカーで結果を返します:

[2021-07-21T06:46:23.938Z] "CONNECT - HTTP/1.1" 404 NR route_not_found - "-" 0 0 0 - "-" "curl/7.77.0-DEV" "424a0870-af92-4a59-a3af-c8dc91b31512" "en.wikipedia.org:443" "-" - - 192.168.101.185:3128 10.10.2.8:39744 - -

ここで、192.168.101.185 は Squid サービス IP です。

Envoy エラーは、ルートがないことを示していますが、サービスが見つかりました。何が欠けていて、何が間違っていますか? 助けや提案をいただければ幸いです。

4

1 に答える 1

0

CONNECT - HTTP/1.1" 404 NR route_not_foundが見つかるまで苦労しました。そして最後に、SQUID ポートでのアウトバウンド トラフィックの istio サイドカーをバイパスすることで、この問題を解決しました。

istio サイドカーを使用したプロキシ クライアント POD の例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: deb
  template:
    metadata:
      labels:
        app: deb
      annotations: 
        traffic.sidecar.istio.io/excludeOutboundPorts: '3128' # A comma separated list of outbound ports to be excluded from redirection to Envoy.
    spec:
      terminationGracePeriodSeconds: 0
      containers:
      - name: debian
        image: debian:buster
        command: ["/bin/sleep", "3650d"]
        imagePullPolicy: IfNotPresent

これで、ServiceEntry に IP アドレスを追加しなくても、プライベート k8s プロキシを使用できるようになりました。

$ HTTPS_PROXY=squid.external:3128 curl https://something

もちろん、istio-sider でそのプロキシへのアウトバウンド トラフィックを追跡することはできません。

于 2021-10-02T09:26:33.917 に答える