基于k8s的內網(wǎng)穿透與服務共存

背景

由于國內的vps要搭建網(wǎng)站都需要備案,所以目前自己的一些服務是在香港的一臺vps上;同時自己家里部署了一些服務比如nas需要在外部訪問,當前是用另一臺vps做的內網(wǎng)穿透,本著能省一點是一點的原則髓霞,遂想著將這兩個能力放到一臺vps上。

核心問題

由于不想每次訪問時還需要輸入端口號畦戒,最理想的方案肯定是都是用80/443端口來訪問方库,但這樣內網(wǎng)穿透的端口就會和ingress的端口沖突;
理想的方案是內網(wǎng)穿透的服務不直接占用主機端口障斋,而是通過域名區(qū)分纵潦,需要穿透的域名轉發(fā)到內網(wǎng)穿透服務。

解決方案

搭建步驟

vps端部署

搭建k8s集群

由于vps上資源并不富裕垃环,所以這里我使用的是k3s邀层,執(zhí)行curl -sfL https://get.k3s.io | sh - --disable traefik,注意我后面使用了ingress nginx所以增加了--disable traefik參數(shù)禁止默認使用traefik遂庄,理論上traefik也行寥院,但是后面ingress的配置可能會有點不同。

部署ingress nginx

# 添加官方 Nginx Ingress helm repository
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# 使用 Helm 安裝 Nginx Ingress
helm install nginx-ingress ingress-nginx/ingress-nginx --namespace kube-system

部署frps

其他沒啥特別的涛目,只有service中注意frps的連接端口需要使用NodePort

apiVersion: v1
kind: Service
metadata:
  labels:
    app: frps-svc
  name: frps-svc
  namespace: frps
spec:
  ports:
    - name: server
      port: 10000
      protocol: TCP
      targetPort: 10000
      nodePort: 34567
  selector:
    app: frps-server
  type: NodePort

部署cert manager

由于需要在k8s側就要做域名的區(qū)分只磷,所以需要將tls證書放到k8s側经磅,同時使用cert manager能夠自動進行證書的renew,簡化后續(xù)維護

helm repo add jetstack https://charts.jetstack.io --force-update
helm repo update

helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.14.2 \
  --set installCRDs=true

創(chuàng)建letsencrypt issuer

issuer有ClusterIssuer和Issuer兩種钮追,ClusterIssuer是全集群生效,一種只在對應的namespace生效阿迈,相應的ingress需要創(chuàng)建在這個namespace元媚。這里我們使用Issuer,因為我們后續(xù)需要生成泛域名證書苗沧,如果使用ClusterIssuer其中有一步報錯一直沒查到原因(可能是不支持)刊棕。泛域名證書的solver只能使用dns01,關于這里的配置可以參考這里待逞,這里我是用的是Cloudflare

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-dns
  namespace: frps
spec:
  acme:
    email: example@youmail.com
    privateKeySecretRef:
      name: letsencrypt-dns
    server: https://acme-v02.api.letsencrypt.org/directory
    solvers:
      - dns01:
          cloudflare:
            apiTokenSecretRef:
              key: api-token
              name: cloudflare-api-token-secret

創(chuàng)建內網(wǎng)穿透的service

后續(xù)請求經(jīng)過ingress后通過這個service轉發(fā)到內網(wǎng)穿透服務

apiVersion: v1
kind: Service
metadata:
  labels:
    app: frps-http
  name: frps-http
  namespace: frps
spec:
  ports:
    - name: server-http
      port: 38080
      protocol: TCP
      targetPort: 38080
  selector:
    app: frps-server
  type: ClusterIP

創(chuàng)建ingress

注意這里創(chuàng)建的是泛域名的ingress甥角,這樣后續(xù)要增加服務,在vps側是不需要增加任何配置的

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wildcard-ingress
  namespace: frps
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - "*.yourdomain.com"
      secretName: my-tls
  rules:
    - host: "*.yourdomain.com"
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frps-http
                port:
                  number: 38080

到這里识樱,在vps上的配置就ok了

內網(wǎng)服務搭建

由于家里的服務不止一個嗤无,如果經(jīng)過內網(wǎng)穿透直接映射到服務的endpoint,則frpc的配置就會變得比較復雜怜庸,vps側的service也需要配置多個端口当犯,所以我在內網(wǎng)再部署了一層nginx,再通過nginx轉發(fā)到各個服務上割疾,這樣內網(wǎng)穿透就只需要配置一個80端口即可嚎卫。nginx的具體配置這里就不列出來了,需要注意的是只需要配置listen 80端口即可宏榕,server name需要和vps側配置相同拓诸。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市麻昼,隨后出現(xiàn)的幾起案子奠支,更是在濱河造成了極大的恐慌,老刑警劉巖涌献,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胚宦,死亡現(xiàn)場離奇詭異,居然都是意外死亡燕垃,警方通過查閱死者的電腦和手機枢劝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來卜壕,“玉大人您旁,你說我怎么就攤上這事≈嵘樱” “怎么了鹤盒?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵蚕脏,是天一觀的道長。 經(jīng)常有香客問我侦锯,道長驼鞭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任尺碰,我火速辦了婚禮挣棕,結果婚禮上,老公的妹妹穿的比我還像新娘亲桥。我一直安慰自己洛心,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布题篷。 她就那樣靜靜地躺著词身,像睡著了一般。 火紅的嫁衣襯著肌膚如雪番枚。 梳的紋絲不亂的頭發(fā)上法严,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音户辫,去河邊找鬼渐夸。 笑死,一個胖子當著我的面吹牛渔欢,可吹牛的內容都是我干的墓塌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了碧信?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤韩肝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后九榔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哀峻,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年哲泊,在試婚紗的時候發(fā)現(xiàn)自己被綠了剩蟀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡切威,死狀恐怖育特,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情先朦,我是刑警寧澤缰冤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布犬缨,位于F島的核電站,受9級特大地震影響棉浸,放射性物質發(fā)生泄漏怀薛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一涮拗、第九天 我趴在偏房一處隱蔽的房頂上張望乾戏。 院中可真熱鬧,春花似錦三热、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至念搬,卻和暖如春抑堡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背朗徊。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工首妖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爷恳。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓有缆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親温亲。 傳聞我的和親對象是個殘疾皇子棚壁,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內容