iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

Yes

  • 如何讓 Pods 提供外部服務連入,這邊就要使用到 Service,相關資訊可以參考 建立外部服務與Pods的溝通管道 - Services。針對連接 Service 的對象分為兩種。一種是叢集之外的外部對象,另一種則是叢集內的其他對象。

  • 以叢集內部來說,假如其他 Pod 想要存取某個 Pod 的服務,雖然透過 IP 直接連接是可行的(因為網路連接預設不阻擋/images/emoticon/emoticon16.gif),但 IP 可能會變動,並非存取最好的方式。此時 Service 可以建立 ClusterIP,則其他 Pod 可以透過 Cluster IP 去連接該 Pod 所提供的服務/images/emoticon/emoticon12.gif

  • 如果是叢集外部的話,則可以透過 NodePort 或是 LoadBalancer 的方式來提供服務。因為本系列不談維運,所以這邊就以最快能夠看到成果的 NodePort 來進行測試跟開放服務。其他比較部分可以參考 Kubernetes NodePort vs LoadBalancer vs Ingress? When should I use what?

  • ClusterIP
    https://ithelp.ithome.com.tw/upload/images/20230916/20148308kbGN4aRaiy.png

  • NodePort
    https://ithelp.ithome.com.tw/upload/images/20230916/20148308XAj7L71c8w.png

  • 建立第一個對外的 Service 服務

apiVersion: v1
kind: Service
metadata:
  name: hello-shell
spec:
  type: NodePort
  ports:
  - port: 8081
    nodePort: 30390
    protocol: TCP
    targetPort: 30089
  selector:
    app: shell-server
  • 當 pod 以及 service 都建立好之後,就可以拿做個簡單的測試。新增另一個 pod 來做叢集內的存取測試。
apiVersion: v1
kind: Pod
metadata:
  name: client-pod
  labels:
    app: client
spec:
  containers:
  - name: my-client
    image: aeifkz/my-ubuntu:v1.0    
    ports: 
    - containerPort: 30089
  • 建立好 pod 之後,可以測試透過 cluster IP + port ,也可以透過 node IP + port 去進行連接。
kubectl get service ;
kubectl exec -it client-pod bash ;
nc [pod IP] 30089 ;
nc [cluster IP] 8081 ;
nc hello-shell 8081 ;
nc [node IP] 30390 ;
  • 但如果是非叢集內的外部 IP 要怎麼存取服務呢? 畢竟現在存取的 node IP 是在宿主機的內部IP。這部分有兩種做法可以開放。
# 取得 minikube 內 service 開放的 url
minikube service hello-shell --url 

# 或是用 kubectl port-forward 指令也是可以的
# 只是這樣開的話要從外部的機器去做測試。
kubectl port-forward svc/hello-shell 30390:8081 --address='0.0.0.0' ; 

#連接開放服務的 IP 位址
nc [your_ip] [your_port] ; 
  • 我個人偏好第二種啦,就統一使用 kubectl 工具去做開放就好了。/images/emoticon/emoticon37.gif

  • 今日總結 :

    • 本日回顧 :
      • 開放 K8s 讓外部存取算是一個相當重要的功能,畢竟攻擊通常是透過外部連入的。今天介紹了兩種 K8s Service 的開放種類,一種是針對內部使用的 cluster IP,另一種則是讓外部存取的 Node port。
    • 次日預告 :
      • 明天會開始介紹從滲透測試的角度到底該如何攻打一個K8s的架構,內容比較偏向理論,可能就沒有實作惹 /images/emoticon/emoticon02.gif

上一篇
Day09 - Minikube 簡易架設及架構介紹
下一篇
Day11 - (攻擊) K8s 的攻擊心法 - 微軟的 K8s 威脅矩陣
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
HoiDam
iT邦新手 5 級 ‧ 2023-10-20 10:54:25

這封面吸了什麼..

我要留言

立即登入留言