openstack 主機無法ping通instance,無法ssh到instance
https://docs.openstack.org/zh_CN/user-guide/cli-nova-configure-access-security-for-instances.html
好不容易安裝好了OpenStack,發現無法ping通instance,無法ssh到instance:
最後折騰了半天發現是security group的問題:
Neutron 預設的安全組規則會禁止掉所有從外面訪問 instance 的流量。
本節我們會修改安全組的配置,允許 ping 和 ssh instance。
有兩種方法可以達到這個目的:
1. 修改 “default” 安全組。 2. 為 cirros-vm1 新增新的安全組。
一、什麼是安全組
安全組,翻譯成英文是 security group。安全組是一些規則的集合,用來對虛擬機器的訪問流量加以限制,這反映到底層,就是使用iptables,給虛擬機器所在的宿主機新增iptables規則。
可以定義n個安全組,每個安全組可以有n個規則,可以給每個例項繫結n個安全組,nova中總是有一個default安全組,這個是不能被刪除的。建立例項的時候,如果不指定安全組,會預設使用這個default安全組。
現在nova中安全組應該會移到quantum中,並且會增加對虛擬機器外出流量的控制。現在nova中的安全組只是對進入虛擬機器的流量加以控制,對虛擬機器外出流量沒有加以限制。
https://docs.openstack.org/zh_CN/user-guide/cli-nova-configure-access-security-for-instances.html
設定例項的許可權和安全設定¶
當你啟動一個虛擬機器,你可以注入*key pair*,它為你的例項提供了SSH訪問路徑。為了能執行,映象必須包含’cloud-init’包
你可以為每個專案至少建立一個金鑰對。你可以在專案所屬的多個例項上使用該金鑰對。如果你使用外部工具生成金鑰對,那麼你可以將它匯入到OpenStack。
註解
一個金鑰對屬於獨立使用者而不屬於專案。要想在多個使用者中共享金鑰,那麼每個使用者需要匯入該金鑰對。
如果映象使用一個靜態根密碼或者靜態金鑰集(都不推薦),那麼當你啟動例項的時候就沒必要提供一個金鑰。
一個*安全組*是一個被命名為網路訪問規則的集合,安全組被用來限制訪問例項流量的型別。當你啟動一個例項時,你可以為它指定一個或多個安全組。如果你沒有建立安全組,那麼新例項會自動分配一個預設安全組,除非你明確指定一個不同的安全組。
每個安全組中的關聯*規則*控制著組中訪問例項的流量。任何進入的流量與規則不匹配將會預設被拒絕。你可以在安全組中新增或刪除規則,並且可以修改預設的或任何其他安全組中的規則。
你可以修改安全組中的規則來允許通過不同的埠和協議訪問例項。比如,你可以為例項上執行的DNS修改規則來允許通過SSH訪問例項,ping通例項或者允許UDP流量。你可以為規則指定以下引數。
- 流量來源 允許來自雲環境其他組成員的IP地址或所有IP地址的流量訪問例項。
- 協議,SSH用TCP、Pings用ICMP或者UDP。
- 虛擬機器的目標埠。定義一個埠範圍。只需要開啟單個埠,輸入同樣的值兩次。ICMP不支援埠,你輸入一個值定義程式碼和被允許的ICMP流量型別。
規則在新建或者修改之後實時生效
新增金鑰對¶
你可以生成一個祕鑰對或上傳一個現有的公鑰
-
要生成一個金鑰對,執行以下命令。
$ openstack keypair create KEY_NAME > MY_KEY.pem
這個命令生成一個你指定名為KEY_NAME的祕鑰對,將私鑰寫入指定的”.pem”檔案裡,且為Nova資料庫註冊公鑰。
-
執行以下命令,設定”.pem”的許可權為只有你本人可讀寫。
$ chmod 600 MY_KEY.pem
匯入祕鑰對¶
-
如果你已經生成一個金鑰對且公鑰位於”~/.ssh/id_rsa.pub”裡面,那麼執行以下命令上傳公鑰。
$ openstack keypair create --public-key ~/.ssh/id_rsa.pub KEY_NAME
該命令將公鑰記錄在Nova資料庫裡且金鑰對的名字命名為你指定的“KEY_NAME”。
-
為確保金鑰對成功匯入,將金鑰對像以下這樣列出:
$ openstack keypair list
新建和管理安全組¶
-
列出當前專案的安全組,包括說明,輸入以下命令:
$ openstack security group list
-
要建立有指定名稱和描述的安全組,則輸入以下命令:
$ openstack security group create SECURITY_GROUP_NAME --description GROUP_DESCRIPTION
-
要刪除指定的組,請輸入以下命令:
$ openstack security group delete SECURITY_GROUP_NAME
註解
您不能刪除一個專案的預設安全組。而且您也不能刪除已經指定給正在執行的例項的安全組。
新建和管理安全組規則¶
使用命令:command:openstack security group rule`修改安全組規則。開始之前,使用source命令執行OpenStack RC檔案。更多細節,參考:doc:../common/cli-set-environment-variables-using-openstack-rc`。
-
要列出安全組規則,則執行以下命令:
$ openstack security group rule list SECURITY_GROUP_NAME
-
要允許SSH訪問例項,則要選擇以下項中的其中一項:
-
允許所有IP訪問,指定IP子網 CIDR為``0.0.0.0/0``:
$ openstack security group rule create SECURITY_GROUP_NAME \ --protocol tcp --dst-port 22:22 --remote-ip 0.0.0.0/0
-
僅允許訪問來自其他安全組(源組)的IP地址訪問指定的埠:
$ openstack security group rule create SECURITY_GROUP_NAME \ --protocol tcp --dst-port 22:22 --remote-group SOURCE_GROUP_NAME
-
-
要允許ping通例項,選擇以下項中的其中一項:
-
允許所有IP訪問,指定IP子網 CIDR為``0.0.0.0/0``。
$ openstack security group rule create --protocol icmp \ SECURITY_GROUP_NAME
這允許訪問所有程式碼和所有ICMP的流量。
-
只允許其他安全組(源組)的成員ping 通雲主機。
$ openstack security group rule create --protocol icmp \ --remote-group SOURCE_GROUP_NAME SECURITY_GROUP
-
-
為了允許訪問UDP埠,比如允許訪問一臺虛擬機器上面的DNS服務,選擇以下選項:
-
允許IP地址UDP訪問,以CIDR的方式指定IP網段為``0.0.0.0/0``。
$ openstack security group rule create --protocol udp \ --dst-port 53:53 SECURITY_GROUP
-
只允許來自其他安全組(源組)的IP地址訪問指定的埠。
$ openstack security group rule create --protocol udp \ --dst-port 53:53 --remote-group SOURCE_GROUP_NAME SECURITY_GROUP
-
刪除安全組規則¶
要刪除一個安全組規則,請指定規則ID。
$ openstack security group rule delete RULE_ID
511 openstack keypair create mykey >mykey.pem
515 chmod 600 mykey.pem
517 openstack keypair list
538 openstack security group rule create 83da1f44-482d-4d9c-90dd-fc081b5756b7 --protocol tcp --dst-port 22:22 --remote-ip 0.0.0.0/0
541 openstack security group rule list 83da1f44-482d-4d9c-90dd-fc081b5756b7
542 openstack security group rule create --protocal icmp --remote-ip 0.0.0.0/0
543 openstack security group rule create --protocal icmp --remote-ip 0.0.0.0/0 83da1f44-482d-4d9c-90dd-fc081b5756b7
544 openstack security group rule create --protocol icmp --remote-ip 0.0.0.0/0 83da1f44-482d-4d9c-90dd-fc081b5756b7