2017-08-07 115 views
4

我有困難我Kubernetes集羣上訪問NodePort服務。Kubernetes集羣在AWS上與芭斯 - NodePort服務不可用

目標

設置ALB入口控制器,這樣我可以使用WebSockets和HTTP/2

設置NodePort服務所要求的是,控制器採取

步驟

以前,在AWS eu-west-1上創建了一個Kops(1.6.2版)集羣。增加了用於nginx入口的kops插件以及Kube-lego。 ELB入口正常工作。

設置的ALB入口控制器使用由該項目指定IAM的個人資料了AWS的密鑰。從負載平衡器

改變後的服務類型來使用NodePort替換kubectl --force

> kubectl describe svc my-nodeport-service 
Name:     my-node-port-service 
Namespace:    default 
Labels:     <none> 
Selector:    service=my-selector 
Type:     NodePort 
IP:      100.71.211.249 
Port:     <unset> 80/TCP 
NodePort:    <unset> 30176/TCP 
Endpoints:    100.96.2.11:3000 
Session Affinity:  None 
Events:     <none> 

> kubectl describe pods my-nodeport-pod 
Name:   my-nodeport-pod 
Node:   <ip>.eu-west-1.compute.internal/<ip> 
Labels:   service=my-selector 
Status:   Running 
IP:    100.96.2.11 
Containers: 
    update-center: 
    Port:    3000/TCP 
    Ready:    True 
    Restart Count:  0 

(ssh into node) 
$ sudo netstat -nap | grep 30176 
tcp6  0  0 :::30176    :::*     LISTEN  2093/kube-proxy 

結果

從ALB捲曲從<public ip address of all nodes>:<node port for service>掛起

捲曲掛起

預期

捲曲來自ALB並直接向節點:節點端口應該返回200「OK」(該服務的HTTP響應於根)

更新:在github在一些進一步的細節以上引用創建 問題有些情況是:

回答

10

默認情況下芭斯沒有配置EC2實例,以允許從外部NodePort流量。

爲了交通羣集外部到達NodePort你必須編輯配置您的EC2實例是在AWS EC2的控制檯您Kubernetes節點。

一旦在EC2控制檯,依次單擊「安全組」。 Kops應該註釋它爲您的集羣製作的原始安全組,如nodes.<your cluster name>master.<your cluster name>

我們需要修改這些安全組以將流量從默認端口範圍轉發到實例。

單擊安全組,單擊規則並添加以下規則。

端口範圍的節點上打開和掌握:30000-32767

security group rule

這將允許互聯網上的任何人訪問您的集羣上NodePort,所以一定要確保你希望這些暴露。

或者,您可以僅允許來自alb-ingress-controller爲ALB創建的安全組,允許它來自任何來源。但是,由於這些可以重新創建,因此可能需要修改修改kubernetes服務的規則。我建議明確指定NodePort是一個預先確定的已知的NodePort,而不是隨機分配的NodePort。