在aws上使用弹性ip地址公开kubernetes服务

时间:2017-07-28 08:38:40

标签: amazon-ec2 kubernetes

我正在试图弄清楚如何使用UDP协议运行在pod中运行的openvpn服务器。

由于使用http比使用openvpn连接更容易测试,因此我还在与openvpn-container相同的pod中运行nginx-container。

我可以在集群内部工作,但我无法使用弹性IP将此nginx服务暴露给Internet。

网络正在编织。

Kubernetes版本是1.6

我已将service.yaml中的externalIPs-field设置为弹性IP地址。我不能使用类型LoadBalancer,因为我的协议是UDP。

服务:

# kubectl describe service openvpn                              
Name:           openvpn
Namespace:      default
Labels:         name=openvpn
Annotations:        kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"name":"openvpn"},"name":"openvpn","namespace":"default"},"spec":{"externalI...
Selector:       name=openvpn
Type:           NodePort
IP:         100.71.93.74
External IPs:       <my_elastic_ip>
Port:           openvpn 1194/UDP
NodePort:       openvpn 30726/UDP
Endpoints:      100.120.0.1:1194
Port:           http    80/TCP
NodePort:       http    30000/TCP
Endpoints:      100.120.0.1:80
Session Affinity:   None
Events:         <none>

端点

# kubectl get endpoints openvpn  
NAME      ENDPOINTS                         AGE
openvpn   100.120.0.1:80,100.120.0.1:1194   20h

我已经完成了https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/,一切都在群集内部进行。

我已使用AWS控制台手动将弹性IP分配给此特定实例。所有安全组都会更新。

甚至可以使用连接到该主机节点的弹性IP连接到kubernetes集群内的pod?如果是,怎么做?

2 个答案:

答案 0 :(得分:1)

您可以让K8S使用类型:LoadBalancer来设置Classic AWS ELB,而不是使用IP地址。从那里你可以CNAME域/子域到ELB并以这种方式访问​​服务?

一个简单的例子:

apiVersion: v1
kind: Service
metadata:
  name: MyApp
  labels:
    app: MyApp
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    name: MyApp
  selector:
    app: MyApp

答案 1 :(得分:0)

您可以尝试NodePort类型。通过以下内容,您可以通过<node-ip>:30080

访问该服务
apiVersion: v1
kind: Service
metadata:
  labels:
    app: app
  name: app-service
  namespace: default
spec:
  ports:
  - name: ext
    nodePort: 30080
    protocol: UDP
    port: 80
  selector:
    app: app
type: NodePort